JPA Specification 查询字段值在列表中,使用 cb.or 连接多个条件
要在 JPA Specification 中使用 cb.like() 方法来查询一个条件在 List 中的情况,并使用 cb.or() 方法将多个条件连接起来,可以按照以下步骤进行操作:
- 创建一个 Specification 对象,用于构建查询条件。
public static Specification<Entity> searchByList(List<String> values) {
return (root, query, cb) -> {
Predicate predicate = cb.disjunction();
for (String value : values) {
predicate = cb.or(predicate, cb.like(root.get('attribute'), '%' + value + '%'));
}
return predicate;
};
}
-
在 Specification 对象的实现中,使用 cb.disjunction() 方法创建一个空的 Predicate 对象,表示使用 OR 连接多个条件。
-
遍历 List 中的每个值,使用 cb.like() 方法创建一个条件,并使用 cb.or() 方法将其与前面的条件进行连接。
-
最后,将构建好的 Predicate 对象返回。
使用示例:
List<String> values = Arrays.asList('value1', 'value2', 'value3');
Specification<Entity> spec = searchByList(values);
List<Entity> entities = repository.findAll(spec);
在上面的示例中,我们创建了一个 List 包含三个值(value1、value2 和 value3),然后使用 searchByList() 方法创建了一个 Specification 对象,并将其传递给 JpaRepository 的 findAll() 方法来执行查询。
原文地址: https://www.cveoy.top/t/topic/qEdM 著作权归作者所有。请勿转载和采集!