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

Java 如何在CRUDEPository的外部文件中存储@Query sql?,java,spring,spring-data,spring-data-jpa,Java,Spring,Spring Data,Spring Data Jpa,我正在使用spring和crudepositorys进行数据库连接 现在我需要一个相当长(几行)的sql查询,我更喜欢在类路径的文件中维护它,而不是直接在代码中维护它 但我怎样才能做到这一点呢? 我的回购协议如下: @Query(value = "<my very long sql query>", nativeQuery = true) //how to inject file content? @Modifying @Transactional public void execu

我正在使用
spring
crudepository
s进行数据库连接

现在我需要一个相当长(几行)的sql查询,我更喜欢在类路径的文件中维护它,而不是直接在代码中维护它

但我怎样才能做到这一点呢? 我的回购协议如下:

@Query(value = "<my very long sql query>", nativeQuery = true) //how to inject file content?
@Modifying
@Transactional
public void executeSpecificSql();
@Query(value=”“,nativeQuery=true)//如何注入文件内容?
@修改
@交易的
public void executeSpecificSql();

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

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

<sql-query name="MyQuery">.......
<mapping resource="MyQuery.sql.xml"/>
4) 使用上述属性文件构建
EntityManagerFactory

现在,可以在Repository方法中使用上述查询:

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

如果您的项目设置有resources文件夹,请在
/META-INF/jpa命名查询.properties
文件下创建,并将键值对添加为
repoClass.methodName=yoursql
。Spring数据将会恢复

对于较长的查询,最好使用
xml
属性文件和
CDATA
标记:

使用以下步骤

  • 在src/main/resources-->META-INF文件夹中创建jpa-named-querys.property文件

  • 在给定的属性文件中污损您的查询。 上面的屏幕截图仔细查看。这里的是实体名称,而方法应与存储库界面中定义的方法匹配。查询应使用对象名称而不是表名,而不是列名,为各个字段提供实体中给定的变量名称

  • 属性名为的接口方法


  • 我知道这有点明显,使用的语法与通常用于
    @Value
    的语法相同?i、 e.
    @Query(value=“${my.property.name}”,nativeQuery=true)
    然后将其放入加载的属性文件中?好的,我不知道这是可行的。无论如何,我怎么能加载一个分布在多行的属性呢?老实说,我不知道它是否有效,我现在真的不能尝试,我只是建议尝试一下(这就是为什么我把它作为一个评论而不是答案发布的原因)。对于您的另一个问题:@membersound您可以试试library。@请参阅此解决方案,它不回答初始问题,因为它应该包含:“相当长(几行)的sql查询”。尽管在config.properties中,每一行新代码上都会有一行或难看的赋值。@rajkumar如何在spring data jpa自定义实现类中获取xml属性文件?每个解决方案都以此结束。但是我有1000行sql,其中包含多层内联视图等。为了可读性,我更愿意保存在
    .sql
    文件中。难道没有办法吗?这个答案和公认的答案没有什么不同。感谢您的回复。事实上,我们已经尝试提供图形表示以便快速理解。
    @Query(name = "MyQuery", nativeQuery = true)
    [return type] executeMyQuery();