如何在CrudRepository的外部文件中存储@Query sql?
我正在使用带有CrudRepository
的spring
进行数据库连接。
现在我需要一个很长(几行)的SQL查询,我更喜欢在类路径中的文件中维护,而不是直接在代码中。
但是我怎么能实现这个目标呢? 我的回购看起来如下:
@Query(value = "", nativeQuery = true) //how to inject file content? @Modifying @Transactional public void executeSpecificSql();
如果您的项目设置了资源文件夹,请在/META-INF/jpa-named-queries.properties
文件/META-INF/jpa-named-queries.properties
创建并添加键值对作为repoClass.methodName=yoursql
。 Spring数据将会上升。
对于更长的查询,最好使用带有CDATA
标记的xml
属性文件: https : //stackoverflow.com/a/19128259/1194415
使用以下步骤。
-
在src / main / resources – > META-INF文件夹中创建jpa-named-queries.property文件
-
在给定的属性文件中玷污您的查询。 上面的截图仔细看。这里的Group是实体名称,而Method应该与 Repository接口中的方法define 匹配 。 查询应该有对象名而不是表名,而不是列名提供实体中给出的各个字段的变量名。
-
具有属性名称的接口方法方法
不确定它是否适合您的设置,但是,这可以通过以下方式完成:
1)使用
标记将查询添加到hibernate映射文件
.......
2)使用
标签定义包含上述文件的hibernate配置文件
3)使用指向上述配置文件的属性"hibernate.ejb.cfgfile"
定义持久性文件
4)使用上面的属性文件来构建EntityManagerFactory
现在,上面的Query可以在Repository方法中使用:
@Query(name = "MyQuery", nativeQuery = true) [return type] executeMyQuery();