oracle not final,Jpa 在CriteriaBuilder中添加where条件NotIn子查询

final CriteriaBuilder cb =entityManager.getCriteriaBuilder();final CriteriaQuery cq = cb.createQuery(Person.class);final Root root = cq.from(Person.class);

cq.select(root);final Subquery subquery = cq.subquery(Integer.class);final Root 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 manageUserSubquery = query.subquery(String.class);

Root relationUserManagePlateDomainRoot = manageUserSubquery.from(RelationUserManagePlateDomain.class);

Join relationUserManagePlateDomainUserDomainJoin =relationUserManagePlateDomainRoot.join(RelationUserManagePlateDomain_.user, JoinType.INNER);

Subquery 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语法)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值