java - 无论如何,在 spring jpa 中是否有在查询中组合 "contain"和 "or"语义(包含其中之一)?

标签 java mysql hibernate jpa spring-data-jpa

我想为我的应用程序提供一个简单的搜索 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/

相关文章:

php - 瓦普2.5 |远程设备或资源不接受连接

hibernate - Hibernate 2级缓存不适用于GORM 6.1.11

java - HQL 是否有 Restrictions.ilike 的等效项(用于不区分大小写的匹配)?

java - 开始在 XAMPP 上使用 openid4java?

java - CMS gc 算法中由于严重内存碎片而无法分配内存会发生什么情况

java - 我尝试使用的 JPanel 的令人困惑的属性

java - 带有外键和枚举的 JPA 复合键

java - Hibernate一对一处理两列(实体类中相同类型的两个字段)

用于查找名称的mysql查询包括特殊字符单引号

mysql - SQL 问题 - 如何选择包含第二个表中所有引用的所有元组?