在spring Boot 3应用程序中,我尝试使用规范
public Page<User> advancedSearch(UserSearch search, Pageable page) {
String[] splittedValues = search.name.split(" ");
Specification<User> hasPersonWithName = (Root<User> root, CriteriaQuery<?> cq, CriteriaBuilder cb) -> {
...
return pre;
};
return findAll(specification, page);
}
我需要为splittedValues中的每个值添加一个全局规范
for (String splittedName: splittedValues) {
specification.or(splittedName);
}
并将其传递给findAll
我不知道该怎么做
编辑
你的解决方案看起来很有效
这产生了
where
1=1
or like e1_0.name "%bob%"
or like e1_0.name "%jame%"
这是一种方法
where
1=1
and (
like e1_0.name "%bob%"
or like e1_0.name "%jame%"
)
1条答案
按热度按时间bkhjykvo1#
使用
or
运算符,可以合并多个条件,检查User
的name
是否包含splittedValues
之一。然后从规范中返回 predicate 。我希望这是你想要的,如果我不明白,请纠正我。这里是一个例子,如果是这样,适应自己的代码。
编辑:要得到
1=1 and (like e1_0.name "%bob%" or like e1_0.name "%jame%")
,可以使用cb.or
方法合并条件,然后使用cb.and
将得到的nameConditions
与pre
组合。返回findAll(有名字的人,第页);}