我们可以在Spring JPA中传递或输入一个.sql文件到Query注解吗?
类似这样@Query(文件:sqlemployeeList.sql。 , nativeQuery=true)
sqlemployeeList.sql - 我想把这个文件放在代码的某个地方,里面会有select sql。
我不希望有本地 sql 字符串 @Query("select abc......", nativeQuery=true) -- 我不想用这样的方式,因为我的 sql 太大。
你不能指定一个sql文件,但Spring Data JPA会在下面的文件中查找。/META-INF/jpa-named-queries.properties
来查找命名查询,这允许你在 sql 文件中指定查询。
这将在 这个问题的答案.
@Jens Schauder是对的,你不能在Spring Data Jpa中指定一个sql文件,但作为一个替代的解决方案,你可以使用这个库。https:/github.comVEINHORNspring-data-sqlfile。 或者你可以直接自行加载文件。请注意:在这个例子中,我使用的是Lombok。 在这个例子中,我使用lombok
@Component
@Slf4j
@AllArgsConstructor
public class ArticleBatchRepository {
@PersistenceContext
EntityManager em;
public List<ArticleBatch> findAll(String articleId) {
Query nativeQuery = em.createNativeQuery(loadQuery("/db/queries/articles/BatchByWarehouse.sql"), ArticleBatch.class);
nativeQuery.setParameter(1, articleId);
return (List<ArticleBatch>) nativeQuery.getResultList();
}
private String loadQuery(String path) {
try {
InputStream is = this.getClass().getResourceAsStream(path);
java.util.Scanner s = new java.util.Scanner(is).useDelimiter("\\A");
return s.hasNext() ? s.next() : "";
} catch (Exception e) {
log.error("Failed to load query {}: {}", path, e.getMessage(), e);
return null;
}
}
}