spring-data-jpa 构建子条件

spring-data-jpa使用CriteriaBuilder拼接where条件,怎么构建子条件,比如这个sql:
select name,age from user where (name like '?' and age < ?) or (name like '?' and age > ?)

我现在用 CriteriaBuilder 的and 和or 只能搞出来没有括号的。
有知道的请指教一下,谢谢

阅读 4.9k
1 个回答

两种:

第一种:

TypedQuery<User> query = em.createQuery(
  "SELECT u FROM User u WHERE (u.name like :n1 and u.age < :a1) or (u.name like :n2 and u.age > :a2)",
  User.class
);
query.setParameter("n1", n1);
query.setParameter("n2", n2);
query.setParameter("a1", a1);
query.setParameter("a2", a2);

第二种:

Predicate less = builder.and(
  builder.like(u.get("name"), n1),
  builder.lt(u.get("age"), a1)
);
Predicate more = builder.and(
  builder.like(u.get("name"), n2),
  builder.gt(u.get("age"), a2)
);
query.where(builder.or(less, more));
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题