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語法)

     

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM