在spring jpa中,有没有一种方法来检测查询的可选参数?

nle07wnf  于 2023-11-19  发布在  Spring
关注(0)|答案(1)|浏览(146)

假设我有一个搜索表单,有3个字段(first/last/email)。如果参数存在,搜索将搜索first/last/email的记录。
我可以这样做:

if (email & first & last) useMethodThatSearchFistLastEmail
else if (email & first)
else if (email & last)
else if (first & last)
else if (first)
else if (last)
else if (email)

字符串
但这太糟糕了
我也可以使用native query和append where子句。
在JPA中有没有办法做到这一点?

uajslkp6

uajslkp61#

使用 predicate 的快速解决方案:

CriteriaBuilder cb = this.em.getCriteriaBuilder();
CriteriaQuery<UserEntity> cq = cb.createQuery(UserEntity.class);
Root<UserEntity> root = cq.from(UserEntity.class);
List<Predicate> predicateList = new ArrayList<>();
if (StringUtils.isNotBlank(email)) {
    predicateList.add(cb.like(cb.lower(root.get("email")), email.toLowerCase() + "%"));
}
query = this.em.createQuery(cq.where(cb.or((Predicate[])predicateList.toArray(new Predicate[0]))));

字符串
注意“new predicate[0]”。predicate[]::new不起作用。

相关问题