【问题标题】:Can we pass @Query (value="Dyanically read from some properties file") dynamically in Spring JPA我们可以在 Spring JPA 中动态传递 @Query (value="Dyanically read from some properties file")
【发布时间】:2018-06-28 15:03:25
【问题描述】:

我们能否在 Spring JPA 中动态传递 @Query (value="Dynamically read from some properties file")。或者除了使用 @NamedQuery 和使用 xml 文件之外,还有什么方法可以将查询外部化?

谢谢。

【问题讨论】:

  • 你试过这样@Query (value="${some_value_from_property_file}")
  • 是的,它只是假设引号下的所有内容都作为查询和查询失败

标签: spring jpa spring-data-jpa


【解决方案1】:
  1. resources文件夹下创建文件jpa-named-queries.properties
  2. jpa-named-queries.properties 文件中添加您的查询。查询名称格式为Schema_class_name.method_name。在下面的示例中,查询返回 Account 实体类,因此第一部分是 Account。在点之后添加方法名称(您可以命名任何名称,只需确保存储库类中的方法名称匹配)
Account.LoginQuery=SELECT a FROM Account a WHERE a.username = :param or a.email=:param
  1. 将方法添加到存储库类AccountRepositoy
Account LoginQuery(String param);

现在,您可以像其他 jpa 方法一样从服务中调用此方法。

【讨论】:

  • mahfuj asif 你能为此提供一个小例子吗?对我来说也需要这个要求。
  • @KOUSIKdaniel 我已经更新了我的答案。我已经提供了一个例子。如果您仍然感到困惑,请告诉我。如果答案有帮助,别忘了点赞
  • @mahuj asif 我正面临 No property loginQuery found for type 错误。原生查询呢?我如何从属性文件中使用它?
  • @KOUSIKdaniel 似乎您可以保存一些类型。您可以在 SO 中使用适当的详细信息提出此问题并标记我/提供链接,以便我可以查看详细信息和帮助
  • stackoverflow.com/a/52662990/4533050这个链接帮了我谢谢你的回答
【解决方案2】:

你试过这个吗:

@Value( "${example.query1}" )
private String query1;

@Query(value = query1)
someMethod();

【讨论】:

  • 是的,但我正在使用实现 JPARepository 的接口,所以我不能像你所说的那样分配值。
  • 哼,你说得对。我在这里搜索过 (docs.spring.io/spring-data/jpa/docs/current/reference/html/…),但我认为你不能使用 JPA 存储库来做到这一点……也许可以创建一个 JdbcTemplate 并在那里运行查询
猜你喜欢
  • 2023-03-31
  • 2016-11-26
  • 1970-01-01
  • 1970-01-01
  • 2018-11-14
  • 1970-01-01
  • 2018-01-14
  • 2019-08-05
  • 2020-03-04
相关资源
最近更新 更多