如何在 Spring Boot 中从应用程序属性文件中读取 jpa 命名查询?
Posted
技术标签:
【中文标题】如何在 Spring Boot 中从应用程序属性文件中读取 jpa 命名查询?【英文标题】:How to read jpa named queries from application properties file in spring boot? 【发布时间】: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)
【参考方案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 属性只允许最终的字符串值。所以我们不能声明没有值的最终变量。所以我认为我们无法从应用程序属性中获取值。如果我错了,请纠正我... 我提到了这个链接,它也帮助了我很多***.com/questions/27902242/…以上是关于如何在 Spring Boot 中从应用程序属性文件中读取 jpa 命名查询?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Spring Boot 中从泛型参数(与任何类无关)中获取值
无法在 spring-boot 应用程序中从 Consul 读取配置
如何在 Spring Boot 中从 Azure SAML 2.0 应用程序获取角色或组