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 只能搞出来没有括号的。
有知道的请指教一下,谢谢

阅读 1.6k
评论 2018-01-03 提问
    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));
    评论 赞赏 2018-01-03
      撰写回答

      登录后参与交流、获取后续更新提醒