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

JPA 2 CriteriaQuery中的FetchMode

是用于指定关联查询中的数据获取策略的枚举类型。FetchMode有两个常用的取值:LAZY和EAGER。

  1. LAZY(延迟加载):当使用LAZY模式时,关联对象的数据将在需要时才被加载。这意味着在查询主对象时,关联对象的数据不会被立即加载,而是在访问关联对象时才会触发加载。这种方式可以提高查询性能,避免不必要的数据加载。在JPA中,LAZY是默认的FetchMode。
  2. EAGER(立即加载):当使用EAGER模式时,关联对象的数据将在查询主对象时立即加载。这意味着无论是否需要使用关联对象的数据,它们都会被一起加载。这种方式可以确保在查询主对象时,关联对象的数据已经可用,但可能会导致性能问题,特别是当关联对象的数据量较大时。

FetchMode在CriteriaQuery中的使用示例:

代码语言:java
复制
CriteriaBuilder cb = entityManager.getCriteriaBuilder();
CriteriaQuery<Order> query = cb.createQuery(Order.class);
Root<Order> orderRoot = query.from(Order.class);
orderRoot.fetch("customer", JoinType.INNER); // 使用EAGER模式加载关联对象
query.select(orderRoot);

List<Order> orders = entityManager.createQuery(query).getResultList();

在上述示例中,我们使用CriteriaQuery查询订单(Order)对象,并使用FetchMode指定了关联对象(customer)的加载策略。在这里,我们使用EAGER模式加载关联对象,确保在查询订单时,关联的顾客(customer)对象也会被立即加载。

推荐的腾讯云相关产品和产品介绍链接地址:

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

相关·内容

JavaEE - JPA2):EJB事务管理

虽然EJB算是JavaEE亲儿子,但是它境遇却不怎么好,主要是被EJB 2.x给坑过开发人员都对他失去了兴趣。...而在往常JDBC编程,这是最常用一种方式,正因为它抽象层次低,需要开发人员百分百地控制事务划分,使用代码指定事务开始结束等生命周期。...Container事务类型 在这种事务类型,由于应用服务器提供容器对事务提供了一定程度支持,因此有下面两种实现思路: 在容器帮助下完成自动划分 使用JTA接口在应用编码完成显式划分 EJB事务划分...那么在从A到B这个调用过程,A事务只能有被挂起这一个选择。当B方法执行完毕后,该事务会被唤起。 一般而言,选择使用CMT即可。只有在CMT确实解决不了问题时候才会考虑BMT。...这个接口是JTA(Java Transaction API)定义一个接口,它提供了几个方法用于显式地对事务进行操作。在使用了BMTBean可以通过@Resource这一注解将它注入。

86410

Hibernate HHH90000022 警告

如果使用 JPA 的话就不能这样写了。 JPA 写法 与上面对应JPA 写法。...CriteriaQuery CriteriaQuery 创建 Where,Order 等条件 从 Session获得 Query 实例,在创建这个 Query 实例时候需要 CriteriaQuery...为 Query 设置返回参数集 执行查询 如果单纯从步骤角度来说,上面的过程更加复杂了。 原因有,从 Session 需要获得 CriteriaBuilder 和 Query 2 个实例。...CriteriaQuery 创建需要实体。 CriteriaQuery 需要解决 2 个问题,从哪里去查询,实际上是从 Root 去查询,这个是 select 这个语句表达。...正是因为上面的问题,才导致这个 JPA 查询有点绕。 总结 对 JPA 查询我们进行一个小总结。 查询基础是从 session 运行 Query 语句。

87730

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

).getResultList(); } 先获取EntityManager,然后从EntityManager获取CriteriaBuilder,再从CriteriaBuilder创建一个CriteriaQuery...select参数,where后面的条件都属于CriteriaQuerywhere后参数,groupBy和having都属于CriteriaQuery对应参数。...里面的root,CriteriaQuery和builder都已经被Jpa赋值好了,我们只需要关注Predicate构建,也就是说,这个findAll方法只能完成where条件构建,而不能实现select...jpa怎么给root什么赋值呢,其实是这样Jpa是一种规范,Hibernate、OpenJPA对其进行了实现,譬如Springboot默认使用Hibernate实现Jpa,也就是上一小节提到EntityManager...那一套,Hibernate创建了CriteriaQuery和Builder和root,并且将值赋给上图各参数,供用户使用,来构建where条件需要Predicate对象。

4.3K20

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

).getResultList(); } 先获取EntityManager,然后从EntityManager获取CriteriaBuilder,再从CriteriaBuilder创建一个CriteriaQuery...select参数,where后面的条件都属于CriteriaQuerywhere后参数,groupBy和having都属于CriteriaQuery对应参数。...里面的root,CriteriaQuery和builder都已经被Jpa赋值好了,我们只需要关注Predicate构建,也就是说,这个findAll方法只能完成where条件构建,而不能实现select...jpa怎么给root什么赋值呢,其实是这样Jpa是一种规范,Hibernate、OpenJPA对其进行了实现,譬如Springboot默认使用Hibernate实现Jpa,也就是上一小节提到EntityManager...那一套,Hibernate创建了CriteriaQuery和Builder和root,并且将值赋给上图各参数,供用户使用,来构建where条件需要Predicate对象。

18.8K94

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

数据访问层,所谓CRUD是后端程序员必修课程,Spring Data JPA 可以让我们来简化CRUD过程,本文由简入深,从JPA基本用法,到各种高级用法。...Repository Spring Data JPA 可以用来简化data access实现,借助JPA我们可以快速实现一些简单查询,分页,排序不在话下。...Criteria API 但是,简单并非万能,有时候也需要面对一些复杂查询,不能享受JPA 查询生成器带来便利。...,但是他问题在于不便于复用,因为你需要先构建CriteriaBuilder, CriteriaQuery, Root....Repository,以及面向动态查询Querydsl和Specifications 用法,使用JPA可以有效减少代码编写量,提升代码易读性和可维护性。

1.9K41

SpringBootJPA基本使用

1、认识JPA JPA(Java Persistence API)是Java持久化API,用于对象持久化。...javax.persistence 包。...,主要有TABLE、SEQUENCE、IDENTITY、AUTO这几种 @Transient 指定忽略字段,不做持久化,一般用于排除非表字段 @Column 指定属性对应字段名和约束条件 @...@Modifying 注解表示这是一个更新数据操作。JPA会把 JPQL 翻译成sql去执行。 第2种是使用原生sql方式,用nativeQuery = true这个属性来表示是否为原生sql。...更新数量:99 5、查询数据库 5.1、使用约定方法名查询 约定方法名一定要根据命名规范来写,JPA会根据前缀、中间连接词(Or、And、Like、NotNull等类似SQL关键字)、内部拼接SQL

1K10

jdbc java_SpringBoot打包

而SpringData JPA只是SpringData框架下一个基于JPA标准操作数据模块。   SpringData JPA:基于JPA标准数据进行操作。简化操作持久层代码。...二、SpringBoot整合SpringData JPA 1、导入maven依赖  在原有的SprigBootmaven依赖基础下加上JPA依赖 2、application.properties...* @param criteriaQuery 封装了我们要执行查询各个部分信息,select from order * @param criteriaBuilder 查询条件构造器 * @return...* @param criteriaQuery 封装了我们要执行查询各个部分信息,select from order * @param criteriaBuilder 查询条件构造器 * @return...* @param criteriaQuery 封装了我们要执行查询各个部分信息,select from order * @param criteriaBuilder 查询条件构造器 * @return

1.6K20

Spring Boot JPA transaction使用

Spring Boot JPA transaction使用 transaction是我们在做数据库操作时候不能回避一个话题,通过transaction,我们可以保证数据库操作原子性,一致性,隔离性和持久性...本文我们将会深入探讨Spring Boot JPA@Transactional注解使用。...Transaction传播级别 传播级别Propagation定义了Transaction边界,我们可以很方便在@Transactional注解定义不同传播级别。...隔离级别主要是为了防止下面3个并发过程可能出现问题: 脏读:读取一个transaction还没有提交change 不可重复读:在一个transaction修改数据库某行数据时,另外一个transaction...https://github.com/ddean2009/learn-springboot2/tree/master/springboot-transaction

2.1K40

JPA实体类注解

用于表示该属性作为ID主键 @GeneratedValue   主键生成策略,@GeneratedValue(strategy=GenerationType.AUTO)表示主键自增长由实现jpa框架来控制...(与generator值一样),sequenceName指定数据库定义序列名字,allocationSize指定序列每次增长1 @Column 描述数据库表该字段定义,具有一下属性  name...:表示数据库表该字段名称,默认情形属性名称一致。 ...通常ORM框架可以根据属性类型自动判断数据库字段类型,但是对于Date类型仍无法确定数据库字段类型究竟是DATE,TIME还是TIMESTAMP。...可以将超类JPA注解传递给子类,使子类能够继承超类JPA注解 @Embedded @Embedded将几个字段组合成一个类,并作为整个Entity一个属性.

3.8K70

Spring-data-jpa(spring数据持久层解决规范)详解

大致整理一个提纲:   1、Spring-data-jpa基本介绍;   2、和Spring整合;   3、基本使用方式;   4、复杂查询,包括多表关联,分页,排序等; 现在开始:   1、Spring-data-jpa...在ORM框架,Hibernate是一支很大部队,使用很广泛,也很方便,能力也很强,同时Hibernate也是和JPA整合比较良好,我们可以认为JPA是标准,事实上也是,JPA几乎都是接口,实现都是...2、我们都知道,在使用持久化工具时候,一般都有一个对象来操作数据库,在原生Hibernate叫做Session,在JPA叫做EntityManager,在MyBatis叫做SqlSession...这里首先从JPA动态查询开始说起,在JPA提供API,动态查询大概有这么一些方法, ?...,在JPA当中有2方法,i.就是前面的改成延时加载;ii.把关联对象List改成Set(List允许重复,在多层抓去时候无法完成映射,Hibernate默认抓去4层,在第三层时候如果是List就无法完成映射

2.9K20
领券