spring-data-jpa 构建子条件

发布于 2022-09-06 09:48:19 字数 232 浏览 13 评论 0

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

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

舂唻埖巳落 2022-09-13 09:48:19

两种:

第一种:

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));
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文