如何在CrudRepository的外部文件中存储@Query sql?

我正在使用带有CrudRepositoryspring进行数据库连接。

现在我需要一个很长(几行)的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

使用以下步骤。

  1. 在src / main / resources – > META-INF文件夹中创建jpa-named-queries.property文件 在此处输入图像描述

  2. 在给定的属性文件中玷污您的查询。 在此处输入图像描述 上面的截图仔细看。这里的Group是实体名称,而Method应该与 Repository接口中的方法define 匹配 查询应该有对象名而不是表名,而不是列名提供实体中给出的各个字段的变量名。

  3. 具有属性名称的接口方法方法

    项目清单

不确定它是否适合您的设置,但是,这可以通过以下方式完成:

1)使用标记将查询添加到hibernate映射文件

 ....... 

2)使用标签定义包含上述文件的hibernate配置文件

  

3)使用指向上述配置文件的属性"hibernate.ejb.cfgfile"定义持久性文件

  

4)使用上面的属性文件来构建EntityManagerFactory

现在,上面的Query可以在Repository方法中使用:

 @Query(name = "MyQuery", nativeQuery = true) [return type] executeMyQuery();