欢迎来到代码驿站!

JAVA代码

当前位置:首页 > 软件编程 > JAVA代码

JPA CriteriaBuilder子查询方式

时间:2022-04-12 09:19:25|栏目:JAVA代码|点击:

JPA CriteriaBuilder子查询

给自己做个备忘

/** 检索关键字 */
if (keyWord != null && !keyWord.trim().equals(""))
{
    // 创建子查询对象
 Subquery<Store> subquery = criteriaQuery.subquery(Store.class);
 Root<Store> root2 = subquery.from(Store.class);
 subquery.select(root2.<Store> get("id"));
 subquery.where(criteriaBuilder.like(root2.<String> get("name"), "%" + keyWord + "%"));
 
 // 给读者稍微解释一下,也给自己留个记忆
    // 这里的意图是将关键做两个模糊检索,一个是在本表中检索title字段
    // 就是criteriaBuilder.like(root.<String> get("title"), "%" + keyWord + "%")
    // 二是将字段与子表中的检索出来的id与本表中store字段做匹配
    // criteriaBuilder.in(root.get("store")).value(subquery))
    // 至于id怎么检索出来的,用子查询模糊检索出来的,参照上面的子查询 
 restrictions = criteriaBuilder.and(restrictions,criteriaBuilder.or(criteriaBuilder.like(root.<String> get("title"), "%" + keyWord + "%"),criteriaBuilder.in(root.get("store")).value(subquery)));
}

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);

上一篇:Java OCR tesseract 图像智能文字字符识别技术实例代码

栏    目:JAVA代码

下一篇:Java实现的生成二维码和解析二维码URL操作示例

本文标题:JPA CriteriaBuilder子查询方式

本文地址:http://www.codeinn.net/misctech/198895.html

推荐教程

广告投放 | 联系我们 | 版权申明

重要申明:本站所有的文章、图片、评论等,均由网友发表或上传并维护或收集自网络,属个人行为,与本站立场无关。

如果侵犯了您的权利,请与我们联系,我们将在24小时内进行处理、任何非本站因素导致的法律后果,本站均不负任何责任。

联系QQ:914707363 | 邮箱:codeinn#126.com(#换成@)

Copyright © 2020 代码驿站 版权所有