【问题标题】:How to store @Query sql in external file for CrudRepository?如何将@Query sql 存储在 CrudRepository 的外部文件中?
【发布时间】:2015-03-10 05:37:22
【问题描述】:

我正在使用springCrudRepositorys 进行数据库连接。

现在我需要一个相当长(几行)的 sql 查询,我宁愿将其保存在类路径中的文件中,而不是直接保存在代码中。

但是我怎样才能做到这一点呢? 我的仓库如下所示:

@Query(value = "<my very long sql query>", nativeQuery = true) //how to inject file content?
@Modifying
@Transactional
public void executeSpecificSql();

【问题讨论】:

  • 我知道这有点明显,使用与@Value 相同的语法?即@Query(value = "${my.property.name}", nativeQuery = true),然后将其放入您加载的属性文件中?
  • 好吧,我不知道这行得通。无论如何,我怎样才能加载分布在多行上的属性?
  • 老实说我不知道​​它是否有效,我目前无法真正尝试,我只是建议尝试一下(这就是为什么我将其发布为评论而不是答案) .对于您的其他问题:stackoverflow.com/questions/8975908/…
  • @membersound 你可以试试github.com/VEINHORN/spring-data-sqlfile library。

标签: java spring spring-data spring-data-jpa


【解决方案1】:

使用以下步骤。

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

  2. 在给定的属性文件中删除您的查询。 上面的截图仔细看。这里 Group 是实体名称,而 Method 应该匹配Repository 接口中定义的方法。 Query 应该有对象名称而不是 table名称,而不是列名,提供实体中为各个字段提供的变量名称。

  3. 带有属性名的接口方法方法

【讨论】:

  • 这个答案与接受的答案没有任何不同。不过感谢您的回复。
  • 确实,尝试提供图形表示以便快速理解。
【解决方案2】:

如果您的项目设置有资源文件夹,请在/META-INF/jpa-named-queries.properties 文件下创建并添加键值对为repoClass.methodName=yoursql。 Spring 数据将被拾取。

对于较长的查询,最好使用带有CDATA 标签的xml 属性文件:https://stackoverflow.com/a/19128259/1194415

【讨论】:

  • 这个解决方案不回答最初的问题,因为它应该包含:“相当长(几行)sql查询”。尽管在 config.properties 中,每一行新代码都会是一行或丑陋的赋值。
  • @rajkumar 如何获取spring data jpa自定义实现类中的xml属性文件?
  • 每个解决方案都以这个结束。但是我有 1000 行 sql 和几层内联视图等。为了便于阅读,我更愿意保留在 .sql 文件中。就没有办法吗?
【解决方案3】:

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

1) 使用&lt;sql-query&gt; 标签将您的查询添加到休眠映射文件

<sql-query name="MyQuery">.......

2) 使用&lt;mapping&gt; 标签定义包含上述文件的休眠配置文件

<mapping resource="MyQuery.sql.xml"/>

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

<property name="hibernate.ejb.cfgfile" value="hibernate.cfg.xml"/>

4) 使用上述属性文件构建EntityManagerFactory

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

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

【讨论】:

    猜你喜欢
    • 2010-12-05
    • 1970-01-01
    • 1970-01-01
    • 2015-03-11
    • 2018-10-31
    • 2019-08-08
    • 2014-11-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多