【问题标题】:How to read jpa named queries from application properties file in spring boot?如何在 Spring Boot 中从应用程序属性文件中读取 jpa 命名查询?
【发布时间】:2019-08-30 19:49:21
【问题描述】:

我在我的 JPA 存储库接口中有自定义长 sql 查询字符串。我觉得将此查询移动到一些属性文件,因为当我想对我的数据库执行查询时,我必须删除所有“+”加号和双引号。与其删除,不如将所有查询放入属性或 yaml 文件中。我可以轻松使用和修改。请建议我这种方式是正确的方法。

@Repository
public interface LoanRepository extends JpaRepository<Loan, Integer> {

     @(name= "{long query}")
     public List<Loan> findLoansByIdAndBalance();
}

【问题讨论】:

  • 如果你把$放在开头会发生什么,那么它将是"${long.query}"
  • 抛出错误 java.sql.SQLSyntaxErrorException: 你的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的“${long.query}”附近使用正确的语法
  • 请任何人帮助我。还有其他方法可以实现吗?
  • 可能你可以在一个类中添加constant variables 并调用它,例如 static final LOANS_BY_ID_AND_BALANCE = "SELECT x FROM x";并调用@Query(Queries.LOANS_BY_ID_AND_BALANCE)

标签: spring-boot jpa named-query


【解决方案1】:

这是一个如何从 yml 文件中获取值的示例。

在您的 application.yml 中:

data:
   query:
      queryGetNames: here_your_query

在你的课堂上,你用这个来调用这个值:

@Setter(onMethod_ = {@Value("${data.query.queryGetNames}")})
private String query;

注意:@Setter 注解来自 lombok

【讨论】:

  • @femando 我想在存储库界面中使用。有可能吗?
  • 我在那里创建了单独的接口,我放置了所有查询并从那里引用我的 JPA 存储库接口。因为@Query VALUE 属性只允许最终的字符串值。所以我们不能声明没有值的最终变量。所以我认为我们无法从应用程序属性中获取值。如果我错了,请纠正我...
  • 我提到了这个链接,它也帮助了我很多stackoverflow.com/questions/27902242/…
猜你喜欢
  • 2020-01-22
  • 2022-07-01
  • 2019-01-11
  • 1970-01-01
  • 2017-10-31
  • 2017-06-17
  • 1970-01-01
  • 2020-04-27
  • 2016-04-29
相关资源
最近更新 更多