zoukankan      html  css  js  c++  java
  • Jpa 在CriteriaBuilder中添加where条件NotIn子查询

    final CriteriaBuilder cb = entityManager.getCriteriaBuilder();
    final CriteriaQuery<Person> cq = cb.createQuery(Person.class);
    final Root<Person> root = cq.from(Person.class);
    cq.select(root);
    
    final Subquery<Integer> subquery = cq.subquery(Integer.class);
    final Root<Person> validityIDSQ = subquery.from(Person.class);
    subquery.select(cb.max(validityIDSQ.get(Person_.validityID)));
    subquery.groupBy(validityIDSQ.get(Person_.personID));
    
    cq.where(cb.in(root.get(Person_.validityID)).value(subquery));
    
    // 将生成
    
    select
        person0_.id as id1_0_,
        person0_.personID as personID2_0_,
        person0_.validityID as validity3_0_,
        person0_.value as value4_0_
    from
        person person0_
    where
        person0_.validityID in (
                select
                    max(person1_.validityID)
                from
                    person person1_
                group by
                    person1_.personID)

    自身所需NotIn语法,所以是

                    Subquery<String> manageUserSubquery = query.subquery(String.class);
                    Root<RelationUserManagePlateDomain> relationUserManagePlateDomainRoot = manageUserSubquery.from(RelationUserManagePlateDomain.class);
                    Join<RelationUserManagePlateDomain, UserDomain> relationUserManagePlateDomainUserDomainJoin = relationUserManagePlateDomainRoot.join(RelationUserManagePlateDomain_.user, JoinType.INNER);
                    Subquery<String> subquery = manageUserSubquery.select(relationUserManagePlateDomainUserDomainJoin.get(UserDomain_.id));
                    Predicate predicate1 = criteriaBuilder.and(criteriaBuilder.not(criteriaBuilder.in(root.get(UserDomain_.id)).value(manageUserSubquery)));
                    predicate.getExpressions().add(predicate1);

    借鉴:

        1.https://www.baidu.com/link?url=UT6AeXPjKVapQC9ksgJ1EEg9KiLMP3yCwS3J8aZMCu7Bcv3a69s9G5Q6MZfEhsNi3e_Wwmj9SBfI7d6bBC9dy_&wd=&eqid=d15aaba20003b81d000000035dcbe7fb(这里说明了在Where条件中添加In子查询语法)

        2.https://stackoverflow.com/questions/21383435/jpa-criteriabuilder-not-in-a-collection(这里说明了怎么添加NotIn语法)

         

    复制请注明出处,在世界中挣扎的灰太狼
  • 相关阅读:
    什么是BFC?
    获取JavaScript对象的键值对两种方法的不同之处
    浏览器什么时候会引起reflow,应该怎样避免reflow的开销呢?
    用js实现跳转页面的方法
    停止animate动画和判断是否处于动画状态
    解决slideDown(),slideUp()鼠标来回进入的问题
    IE7浏览器绝对定位被下边元素遮挡问题解决办法
    前端开发面试要点及对策
    inline-block元素之间空白间距的解决办法
    web前端开发和移动前端开发的本质区别在哪里?
  • 原文地址:https://www.cnblogs.com/XingXiaoMeng/p/11852429.html
Copyright © 2011-2022 走看看