首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

JPA Criteria API -字段在子类上的where条件

JPA Criteria API是Java Persistence API(JPA)的一部分,它提供了一种类型安全的查询方式,用于动态构建查询语句。JPA Criteria API允许开发人员以面向对象的方式编写查询,而不是使用传统的字符串查询语句。

在JPA Criteria API中,可以使用字段在子类上的where条件来过滤查询结果。子类是指实体类的派生类或继承类。通过在查询中指定子类的字段,并设置相应的条件,可以实现对子类特定属性的过滤。

使用字段在子类上的where条件可以实现更精确的查询,只返回满足特定条件的子类实体。这对于具有继承关系的实体类来说特别有用,可以根据子类的属性进行查询和过滤。

以下是使用JPA Criteria API中字段在子类上的where条件的示例代码:

代码语言:txt
复制
CriteriaBuilder cb = entityManager.getCriteriaBuilder();
CriteriaQuery<ParentEntity> query = cb.createQuery(ParentEntity.class);
Root<ParentEntity> root = query.from(ParentEntity.class);

// 添加子类字段的where条件
Predicate predicate = cb.equal(root.get(ChildEntity_.childField), "value");

query.select(root).where(predicate);

List<ParentEntity> results = entityManager.createQuery(query).getResultList();

在上述示例中,我们使用equal方法创建了一个等于条件的谓词(Predicate),并将其应用于子类字段ChildEntity_.childField。然后,我们将谓词添加到查询的where条件中,以过滤满足条件的结果。

JPA Criteria API的优势包括:

  1. 类型安全:使用JPA Criteria API可以在编译时进行类型检查,避免了在运行时出现的字符串拼接错误。
  2. 面向对象:JPA Criteria API允许以面向对象的方式编写查询,更符合开发人员的思维方式。
  3. 动态查询:JPA Criteria API支持动态构建查询语句,可以根据不同的条件灵活地生成查询。

JPA Criteria API的应用场景包括:

  1. 复杂查询:当需要进行复杂的查询操作时,JPA Criteria API可以提供更灵活和可读性更高的查询方式。
  2. 动态查询:当查询条件需要根据用户输入或其他动态因素进行变化时,JPA Criteria API可以动态构建查询语句,避免硬编码查询条件。
  3. 继承关系查询:当实体类存在继承关系时,可以使用JPA Criteria API来查询和过滤子类特定属性。

腾讯云提供了云数据库 TencentDB for MySQL,它是一种高性能、可扩展的云数据库解决方案,适用于各种规模的应用程序。您可以使用TencentDB for MySQL来存储和管理数据,并通过JPA Criteria API进行查询和过滤操作。更多关于TencentDB for MySQL的信息,请访问TencentDB for MySQL产品介绍

请注意,以上答案仅供参考,具体的技术选型和产品选择应根据实际需求和情况进行评估和决策。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

jpa : criteria 作排除过滤、条件中除去查出的部分数据、JPA 一个参数可查询多个字段

PS : mybatis 中也有对于 criteria 的使用,见另一文章:mybatis :Criteria 查询、条件过滤用法 1. 业务场景: (1) ....按业务条件查到所有数据后,要过滤掉其中 “当前领导自己填报的但不由自己审批的数据” ,本来我一直在想是不是会有和 sql 中类似于 except 效果的实现 ,就一直想找这个方法,但没有点出这个方法来,...直到在源码中看到一个 not 方法 。...在微信端要求在一个输入框中实现多种类型数据查询。可输入“姓名、项目名称、工作任务、工作类型” 中的任意一种,并作相应条件过滤。...CriteriaBuilder cb) { List list = Lists.newArrayList(); //构造条件

2.5K20

SpringData JPA就是这么简单

当时还是第一次见,觉得也没什么大不了,就是封装了Hibernate的API而已。 然后在慕课网上又看到了SpringData的教程了。于是就进去学习了一番。...都是面向对象的查询语言。 ? ? ? 2.1 Criteria查询 这里就涵盖了很多的条件了。 ? 2.2 Specification接口使用 ?...其实这个接口的API就和Criteria是一样的,看懂了Criteria API,这个接口就会用了。 2.3 nameQuery注解 ? ? 2.4query注解 ? ?...后来去看了JPA的一对多、多对一的博文去参考了一下,感觉我还是没有错。 最后才发现大多数的博文都是在get方法上写注解的,而我就在属性上直接写注解了。...在Get方法上写注解的原因是不用破坏我们的封装性,我直接在属性上写注解,而属性是private来进行修饰的。这也导致了我出现这个错误的原因。

1.6K80
  • Java一分钟之-JPA查询:JPQL与Criteria API

    在Java Persistence API (JPA)的世界里,查询数据库是日常开发的重要一环。...JPA提供了两种主要的查询方式:Java Persistence Query Language (JPQL) 和 Criteria API。这两种方式各有千秋,适用于不同的场景和需求。...参数绑定错误:在使用命名参数或位置参数时,容易出现参数绑定错误,如参数数量不匹配或类型错误。 避免策略 明确实体映射:确保实体类的属性与数据库字段正确映射,必要时使用@Column注解明确指定。...Criteria API - 构建动态查询 Criteria API提供了一种类型安全的编程方式来构建查询,特别适合于构建复杂且动态变化的查询条件。...常见问题与易错点 过度复杂化:由于Criteria API的链式调用和众多API,初学者容易构建出难以阅读和维护的查询。 性能问题:不当使用可能导致生成低效的SQL语句,如过多的JOIN操作。

    63510

    MongoDB 查询方式

    两种查询方式: 1、JPA 2、MongoTemplate 一、JPA 首先是JPA的 简单查询 dao层 public interface DogRepository extends MongoRepository...的复杂查询: ExampleMatchers 应该是比较简单的一个方法 可以直接使用 findAll,就可以实现自定义参数了 如果不是用于匹配,而是整个值匹配,就不需要创建匹配器 JPA 使用匹配器ExampleMatchers...,即不管password是什么值都不加入查询条件 .withIgnorePaths("password"); //条件,将查询的参数赋值到对应字段 TrackLog trackLog = new TrackLog...Dog> dogs = mongoTemplate.find(query, Dog.class); return dogs; } } 复杂方式: 这个和JPA的有些相似,同样用到了...ExampleMatcher.GenericPropertyMatchers.contains()) .withIgnorePaths("clasDisplayName")//忽略这个字段的匹配

    1.2K20

    芋道 Spring Boot MongoDB 入门

    基于方法名查询」小节中,我们已经提到: 在 Spring Data 中,支持根据方法名作生成对应的查询(WHERE)条件,进一步进化我们使用 JPA ,具体是方法名以 findBy、existsBy、countBy...具体的规则,在 《Spring Data JPA —— Query Creation》 文档中,已经详细提供。...事实上,在使用 Example 进行查询的时候,我们无需使用特定的存储器(数据库)的查询语言。 请原谅艿艿蹩脚的翻译。...Example API 一共包含三部分: Probe :含有对应字段的实体对象。通过设置该实体对象的字段,作为查询字段。 注意,Probe 并不是一个类,而是实体对象的泛指。...ExampleMatcher :ExampleMatcher 可以定义特定字段的匹配模式。例如说,全模糊匹配、前缀模糊匹配等等。 简单来说,通过实体对象的字段作为查询条件,只能满足相等的情况,对于 !

    2.6K10

    Hibernate 的 HHH90000022 警告

    警告信息如下: HHH90000022: Hibernate's legacy org.hibernate.Criteria API is deprecated; use the JPA javax.persistence.criteria.CriteriaQuery...如果使用 JPA 的话就不能这样写了。 JPA 写法 与上面对应的是 JPA 的写法。...CriteriaQuery 中创建 Where,Order 等条件 从 Session中获得 Query 实例,在创建这个 Query 实例的时候需要 CriteriaQuery 才可以创建。...CriteriaQuery 的创建需要实体。 CriteriaQuery 需要解决 2 个问题,从哪里去查询,实际上是从 Root 去查询,这个是 select 这个语句表达的。...查询条件是什么,这个是 where 语句表达的。 因为是 从 Root 里面查,所以需要设置 Root 对象,root 对象又是从 criteriaQuery 中的 from 来的。

    94730

    Spring Boot 之 Spring Data JPA 三(Specifications)一、首先建立一个Spring Boot 工程二、编写一个实体类来记录数据三、通过接口实现Specifica

    Specifications 的思路来自于“领域驱动设计”的概念,通过可编程的方式实现查询的where语句。我们今天就来写一个Specification的例子。...2 的criteria API实现Specifications查询 Repository支持了Specifications查询,我们在代码中实现查询,如下代码所示: package cn.techcave.demo.jpa3...org.springframework.data.jpa.domain.Specifications.where import javax.persistence.criteria.CriteriaQuery...Specification还可以进行组合条件的查询,例如filterByNames方法,我们用or组合了两个nameLike的Specification。...findByName结果 findByNames,这里测试或验收的是组合查询,两个组合条件都是包含名称,当然也可以使用其他查询条件: ? findByNames组合查询结果 原文地址

    1.6K50

    什么是JPA_论文题目不能用浅谈吗

    定义 JPA 即Java Persistence API。 JPA 是一个基于O/R映射的标准规范(目前最新版本是JPA 2.1 )。...JPA提供的技术: ORM映射元数据:JPA支持XML和JDK 5.0注解两种元数据的形式,元数据描述对象和表之间的映射关系,框架据此将实体对象持久化到数据库表中; JPA 的API:定义规范,以操作实体对象...JPA提供了以下几种ID生成策略 GeneratorType.AUTO ,由JPA自动生成 GenerationType.IDENTITY,使用数据库的自增长字段,需要数据库的支持(如SQL Server...ID的增长 需要定义一个TableGenerator,在@GeneratedValue中引用。...– 可能优选基于字符串的JPQL查询(例如Named Queries)非查询类型安全 对于在运行时构建的动态查询 – 可能首选Criteria API查询类型安全 JPQL //1.查询 TypedQuery

    1.6K20

    Spring认证中国教育管理中心-Spring Data MongoDB教程四

    不同于,文档,以除去由它们的标识_id,运行给定的查询,应用sort,limit和skip选择第一,然后在一次在一个单独的步骤中除去所有。 从GOT集合中删除与查询条件匹配的所有文档。...乐观锁定 该@Version注释在 MongoDB 的上下文中提供类似于 JPA 的语法,并确保更新仅应用于具有匹配版本的文档。...此对象定义用于执行查询的条件和选项。这些标准是通过使用一个Criteria对象来指定的,该对象具有一个静态工厂方法,where用于实例化一个新Criteria对象。...大多数方法返回Criteria对象,为 API 提供流畅的样式。...Criteria 类的方法 的Criteria类提供了以下的方法,所有这些都对应于运营商在MongoDB中: Criteria all (Object o)使用$all运算符创建条件 Criteria

    2.8K20

    深入探索Spring Data JPA, 从Repository 到 Specifications 和 Querydsl

    数据访问层,所谓的CRUD是后端程序员的必修课程,Spring Data JPA 可以让我们来简化CRUD过程,本文由简入深,从JPA的基本用法,到各种高级用法。...Repository Spring Data JPA 可以用来简化data access的实现,借助JPA我们可以快速的实现一些简单的查询,分页,排序不在话下。...Criteria API 但是,简单并非万能,有时候也需要面对一些复杂的查询,不能享受JPA 查询生成器带来的便利。...JPQ 提供了Criteria API 和 Criteria API 可以通过编程方式动态构建查询,强类型检查可以避免错误。...本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

    2K41

    tkmapper教程_tkmapper

    USER_NAME 字段 @Table 注解(JPA) @Table 注解可以配置 name,catalog 和 schema 三个属性,配置 name 属性后,直接使用提供的表名,不再根据实体类名进行转换...) @Transient private String otherThings; //非数据库表中字段 @Id 注解(JPA) 一个实体类中至少需要一个标记 @Id 注解的字段,存在联合主键时可以标记多个...当类中没有存在标记 @Id 注解的字段时,你可以理解为类中的所有字段是联合主键。使用所有的 ByPrimaryKey 相关的方法时,有 where 条件的地方,会将所有列作为条件。...,有了该注解后,通用 Mapper 会自动解析所有的接口,如果父接口(递归向上找到的最顶层)存在标记该注解的接口,就会自动注册上。...//配置方式: notEmpty=true enableMethodAnnotation 可以控制是否支持(getter 和 setter)在方法上使用注解,默认false。

    1.2K10

    详解Jpa动态复杂条件查询,查询指定字段、并包括sum、count、avg等数学运算,包括groupBy分组

    Jpa是我一直推荐在Springboot及微服务项目中使用的数据库框架,并由于官方的并不是十分友好和易用的api,导致很多人使用起来并不方便,下面就来展示一下我对api进行了封装后的代码。...MySpecification就是封装好的工具类,能够大幅简化jpa构建条件查询的操作。...,在某个数组范围内,并且name字段like一个传来的值,并且deleteFlag字段等于false的查询条件。...里面的root,CriteriaQuery和builder都已经被Jpa赋值好了,我们只需要关注Predicate的构建,也就是说,这个findAll方法只能完成where条件的构建,而不能实现select...jpa怎么给root什么的赋值的呢,其实是这样的,Jpa是一种规范,Hibernate、OpenJPA对其进行了实现,譬如Springboot默认使用Hibernate实现Jpa,也就是上一小节提到的EntityManager

    5K20

    SpringBoot 整合 MongoDB 实现数据的增删改查!

    一、介绍 在之前的文章中,我们详细的介绍了 MongoDB 的配置和使用,如果你对 MongoDB 还不是很了解,也没关系,我们一起在回顾一下。...注解@Id表示当前字段,在集合结构中属于主键类型。...第一种方式是采用 Springboot 官方推荐的 JPA 方式,这种操作方式,使用简单但是灵活性比较差。...document : indexList) { System.out.println("索引列表:" + document); } } } 我们还可以通过在实体类上加注解方式来创建索引...在实际的业务场景中,可能还需要用到聚合函数等高级查询,大家如果有这种需求,可以访问如下地址获取更加详细的 api 文档介绍:MongoDB 文档查询 api 介绍 四、参考 1、菜鸟教程 - mongodb

    4K10

    详解Jpa动态复杂条件查询,查询指定字段、并包括sum、count、avg等数学运算

    Jpa是我一直推荐在Springboot及微服务项目中使用的数据库框架,并由于官方的并不是十分友好和易用的api,导致很多人使用起来并不方便,下面就来展示一下我对api进行了封装后的代码。...MySpecification就是封装好的工具类,能够大幅简化jpa构建条件查询的操作。...,在某个数组范围内,并且name字段like一个传来的值,并且deleteFlag字段等于false的查询条件。...里面的root,CriteriaQuery和builder都已经被Jpa赋值好了,我们只需要关注Predicate的构建,也就是说,这个findAll方法只能完成where条件的构建,而不能实现select...jpa怎么给root什么的赋值的呢,其实是这样的,Jpa是一种规范,Hibernate、OpenJPA对其进行了实现,譬如Springboot默认使用Hibernate实现Jpa,也就是上一小节提到的EntityManager

    21.6K94
    领券