【发布时间】:2017-11-15 15:56:25
【问题描述】:
此自定义查询有效(这只是说明问题的基本查询):
public interface BookQueryRepositoryExample extends Repository<Book, Long> {
@Query(value = "select * from Book b where b.name=?1", nativeQuery = true)
List<Book> findByName(String name);
}
但我需要另一个自定义查询,其中 where 子句将在调用该方法之前动态构造。
public interface BookQueryRepositoryExample extends Repository<Book, Long> {
@Query(value = "select * from Book b where ?1", nativeQuery = true)
List<Book> findByWhatever(String qry);
}
但我无法让它工作。有什么解决办法吗?
更新日期:2017 年 6 月 16 日
只想提一下,我正在搜索的字段是“非规范化”形式。这些值可能看起来像这些(如下)。所以我的查询有一系列类似的语句
样本 1:
name:John Smith;address1:123 Xyz St;city:New York;zip:12345;country:USA;id:ABC1234;email:js@abc.com;
示例 2:重新排列
address1:123 Xyz St;zip:12345;email:js@abc.com;name:John Smith;country:USA;id:ABC1234;city:New York;
示例 3:缺少字符串/文本
zip:12345;email:js@abc.com;name:John Smith;id:ABC1234;city:New York;
【问题讨论】:
-
不,因为这不是参数替换的工作方式。为什么不使用 JPQL 或 Criteria 查询来进行动态查询。 (您的第一个自定义查询甚至不需要
findByName方法就足以实现您想要的。 -
好的。将调查该标准查询。谢谢。我并没有真正使用 findByName 方法。我只是把它放在那里是为了强调。
-
你可以访问这个答案stackoverflow.com/a/50365522/3073945
标签: spring-boot spring-data spring-data-jpa