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
标记:使用以下步骤
我知道这有点明显,使用的语法与通常用于
@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();