JPA CriteriaBuilder子查询方式

目录
  • JPA CriteriaBuilder子查询
  • Jpa 在CriteriaBuilder中添加where条件NotIn子查询

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

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • 使用JPA进行CriteriaQuery进行查询的注意事项

    目录 使用JPA CriteriaQuery查询的注意事项 1.pojo类 service层 查询方法 封装JPA动态查询(CriteriaQuery) EntityManager管理器,通过spring管理 Page分页和结果封装类 IBaseDao接口实现了BaseDaoImpl IBaseDao接口 使用JPA CriteriaQuery查询的注意事项 1.pojo类 @Entity @Table(name = "report_workload") @JsonIgnoreProp

  • 在JPA中criteriabuilder使用or拼接多个like语句

    目录 JPA criteriabuilder使用or拼接多个like语句 sql语句类似于 sql语句如下 java-jpa-criteriabuilder使用 一个复杂的查询例子 JPA criteriabuilder使用or拼接多个like语句 项目中有两张表,一张角色和机构的关系表role_work_site_relation,存放的是机构的id和角色的id,另一张表member_info表中存放用户相关信息. 机构为树形结构,role_work_site_relation中存放的是当前角

  • 使用Spring Data Jpa的CriteriaQuery一个陷阱

    使用Spring Data Jpa的CriteriaQuery进行动态条件查询时,可能会遇到一个陷阱,当条件为空时,查询不到任何结果,并不是期望的返回所有结果.这是为什么呢? 例如下述代码,当predicates为空时,返回结果总是为空. public Page<VmhostWithRelationPO> listVmhostSpecWithRelationByPage(String name) { Specification<VmhostWithRelationPO> spec

  • JPA 使用criteria简单查询工具类方式

    目录 打包JPA动态查询(CriteriaQuery) eq.ge.gt 封装JPA动态查询(CriteriaQuery) EntityManager管理器,通过spring管理 Page分页和结果封装类 IBaseDao接口实现了BaseDaoImpl IBaseDao接口 以前用jpa写了一个条件筛选的查询数据如下,才知道那么渣渣,就是一个表,根据前端来筛选数据,写的如下 首先就是判断前端传来的参数就写了那么多,现在才发现是渣渣中的渣渣,而且还费时,用criteria很快就搞定 首先创建类并

  • Spring JPA使用CriteriaBuilder动态构造查询方式

    目录 Spring JPA使用CriteriaBuilder动态构造查询 JPA CriteriaBuilder中一些运算的使用 Spring JPA使用CriteriaBuilder动态构造查询 在使用Spring JPA提供的方法只能进行简单的CRUD,如果遇到复杂的情况就需要我们动态来构建查询条件了.这里我们来看使用CriteriaBuilder如何来构造查询. 核心代码: CriteriaBuilder criteriaBuilder = entityManager.getCriteri

  • Spingboot JPA CriteriaBuilder 如何获取指定字段

    目录 Spingboot JPA CriteriaBuilder获取指定字段 Java JPA CriteriaBuilder使用 一个复杂的查询例子 Spingboot JPA CriteriaBuilder获取指定字段 废话不说直接贴代码 public class ActivityVO implements Serializable { private static final long serialVersionUID = 1L; private int id; private Strin

  • JPA CriteriaBuilder子查询方式

    目录 JPA CriteriaBuilder子查询 Jpa在CriteriaBuilder中添加where条件NotIn子查询 JPA CriteriaBuilder子查询 给自己做个备忘 /** 检索关键字 */ if (keyWord != null && !keyWord.trim().equals("")) { // 创建子查询对象 Subquery<Store> subquery = criteriaQuery.subquery(Store.cla

  • JPA CriteriaBuilder子查询方式

    目录 JPA CriteriaBuilder子查询 Jpa 在CriteriaBuilder中添加where条件NotIn子查询 JPA CriteriaBuilder子查询 给自己做个备忘 /** 检索关键字 */ if (keyWord != null && !keyWord.trim().equals("")) { // 创建子查询对象 Subquery<Store> subquery = criteriaQuery.subquery(Store.cl

  • 在SQL Server中使用子查询更新语句

    测试环境准备 create table #table1 ( id int , name varchar(20) ); go create table #table2 ( id int , name varchar(20) ); go insert into #table1 ( id, name ) values ( 1, 'a' ), ( 2, null ), ( 3, 'c' ), ( 4, 'd' ), ( 5, 'e' ); insert into #table2 ( id, name )

  • Spring Data JPA查询方式及方法名查询规则介绍

    目录 Spring Data JPA查询方式及方法名查询规则 一.通过解析方法名创建查询 二.使用 @Query 创建查询 JPA 常用查询方法记录 CrudRepository 默认带的查询方法 简单的扩展-以字段为关键字进行查询 使用@Query 进行复杂查询 使用 Specification 进行复杂查询 Predicate CriteriaBuilder Root Spring Data JPA查询方式及方法名查询规则 Spring Data JPA 一.通过解析方法名创建查询 在执行查

  • Spring Data Jpa的四种查询方式详解

    这篇文章主要介绍了Spring Data Jpa的四种查询方式详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 一.调用接口的方式 1.基本介绍 通过调用接口里的方法查询,需要我们自定义的接口继承Spring Data Jpa规定的接口 public interface UserDao extends JpaRepository<User, Integer>, JpaSpecificationExecutor<User> 使用这

  • Spring Data Jpa多表查询返回自定义实体方式

    目录 SpringDataJpa多表查询返回自定义实体 Repository 好下面到单元测试 自定义实体 SpringDataJpa多表查询返回自定义VO的问题 下面是我的代码 下面是我的dao层,重点 SpringDataJpa多表查询返回自定义实体 比如来看一下这样的一条SQL语句,这是一个三张表的多表查询,显然在JPA中用一个实体类是接受不了这些参数的 select  t1.id as chapterId , t1.name as chapterName , t2.id as unitI

  • Mysql子查询关键字的使用方式(exists)

    目录 1. all 1.1 格式 1.2 特点 1.3 操作 2. any(some) 1.1 格式 1.2 特点 1.3 操作 3. in 1.1 格式 1.2 特点 1.3 操作 4. exist 1.1 格式 1.2 特点 1.3 操作 1.4 解释 1. all 1.1 格式 1.2 特点 all:与子查询返回的所有值比较为true则返回true all可以与=,>=,>,<,<=,<>结合使用,分别表示等于,大于等于,大于,小于,小于等于,不等于其中的所有数据

  • jpa EntityManager 复杂查询实例

    目录 jpa EntityManager复杂查询 概念 1. 注入entitymanager 2. 建立连接,执行查询操作 拓展 基于EntityManager的使用 1.最基础的查询 2.spring data jpa的toPredicate方法 jpa EntityManager复杂查询 概念 EntityManager:EntityManager是JPA中用于增删改查的接口,它的作用相当于一座桥梁,连接内存中的java对象和数据库的数据存储.可以用getCriteriaBuilder()的

随机推荐