java criteria exist_java – 在jpa标准中,“万一有至少1行返回true”

我正在尝试使用JPA中的标准api创建后续句子(

eclipselink),

很简单问一下某个类别中是否存在某些用户

我想要的句子:

SELECT

CASE

WHEN EXISTS

(SELECT * FROM user WHERE category = ?)

THEN true

ELSE false

END

bind => [10]

我尝试使用此代码:

CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();

CriteriaQuery criteriaQuery = criteriaBuilder.createQuery(Boolean.class);

Root root = criteriaQuery.from(tclass);

Subquery subquery = criteriaQuery.subquery(tclass);

Root subroot = subquery.from(tclass);

subquery.select(subroot);

Predicate subPredicate = criteriaBuilder.equal(subroot.get("category"),category);

subquery.where(subPredicate);

Predicate predicateExists = criteriaBuilder.exists(subquery);

Case booleancase = criteriaBuilder.selectCase();

Expression booleanExpression =

booleancase.when(predicateExists,true)

.otherwise(false);

criteriaQuery.select(booleanExpression);

TypedQuery typedQuery = entityManager.createQuery(criteriaQuery);

typedQuery.getResultList();

可悲的是我的句子是以下,我想删除最后一个“来自用户”:

SELECT

CASE

WHEN EXISTS

(SELECT ? FROM user t1 WHERE (t1.category = ?))

THEN ?

ELSE ?

END

FROM user t0

bind => [1, 110, true, false]

任何的想法?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值