我使用
spring
和 CrudRepository
进行数据库连接。
现在我需要一个相当长(几行)的sql查询,我更愿意将其维护在类路径中的文件中,而不是直接在代码中。
但是我怎样才能实现这个目标呢? 我的仓库如下所示:
@Query(value = "<my very long sql query>", nativeQuery = true) //how to inject file content?
@Modifying
@Transactional
public void executeSpecificSql();
文本块:
public class SomeLongQuery {
public static final String QUERY =
"""
SELECT *
FROM table
WHERE
...
ORDER BY some_column;
""";
}
并将其用作字符串常量:
@Query(value = SomeLongQuery.QUERY, native = true)
Iterable<SomeEntity> findByLongQuery();
1) 使用
<sql-query>
标签将查询添加到休眠映射文件
<sql-query name="MyQuery">.......
2) 使用
<mapping>
标签定义包含上述文件的 hibernate 配置文件
<mapping resource="MyQuery.sql.xml"/>
3) 使用指向上述配置文件的属性
"hibernate.ejb.cfgfile"
定义持久性文件
<property name="hibernate.ejb.cfgfile" value="hibernate.cfg.xml"/>
4) 使用上面的属性文件构建
EntityManagerFactory
@Query(name = "MyQuery", nativeQuery = true)
[return type] executeMyQuery();