我想为我的应用程序提供一个简单的搜索 API。该 API 的签名如下:
List<Blog> search(List<String> keywords);
它接受关键字列表并返回标题包含关键字列表中的任何一个的所有博客。
通常,在数据库端我想实现如下语义:
select * from blog where blog.title like `%keyword1` or blog.title like `%keyword2` or ...
sql 具有可变长度。
spring jpa 是否有办法实现这一点?
<小时/>我读过类似的帖子:JPA "contains one of" ,但它与我需要的不同,因为我想要字符串包含而不是“in”。
最佳答案
您可以使用正则表达式来代替作为模式连接的关键字:
String pattern = String.join("|", keywords);
pattern = String.format(".*(%s)", pattern);
然后:
SELECT * FROM blog WHERE blog.title REGEXP `pattern`
关于java - 无论如何,在 spring jpa 中是否有在查询中组合 "contain"和 "or"语义(包含其中之一)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60352649/