JPA的延时加载分成两种情况1.表间的延时加载,2.表中属性的延时加载,比如大型字段blob,需等到使用时在加载,效率才比较高
首先,1.表间的延时加载
JPA中数据获取(Fectching)有两种方式:Eager和Lazy。明白他们之间的差异和知道何时应用哪种方式对于有效率地进行数据库操作非常关键。
Lazy: 只有需要的时候才将相关联的实体取出
Eager: 一次将所有相关联的实体取出
使用的方法如下:
java 代码
@OneToMany(fetch=FetchType.EAGER)
-
public Collection<Empolyee> getEmpolyees() {
-
return empolyees;
-
}
关系类型后使用fetch元素。通常Eager是低效率的,因为他将整个关系映射图取出。例如我们有多个消费者,每个消费者有多个订单,每个订单有多个订货商品。如果我们对所有关系全部使用Eager方式,那么仅仅是查询一些消费者就可能产生巨大的对象图,包括了符合查询条件的消费者,以及每个消费者的所有订单,以及每个订单的所有订货商品。这会导致严重的负载问题。如果你在一个持久上下文中操作一些受管理的实体(Managed Entity),那么使用Lazy方式更加有效率。在大部分情况下,只有需要时,相关联实体才会被加载。
更加细粒度的数据获取控制可以通过使用Lazy方式和获取联合来(fetch joins)完成。如果查询没有显式指定fetch joins,则使用Lazy方式获取数据,如果查询指定了fetch joins,在joins中的实体将使用Eager方式获取数据。
2.表中属性的延时加载
@Lob
默认情况下,JPA 持续性提供程序假设所有持久数据均可以表示为典型的数据库数据类型。
结合使用 @Lob 批注与 @Basic 映射,以指定持久属性或字段应作为大型对象持久保存到数据库支持的大型对象类型。
Lob 可以是二进制类型或字符类型。持续性提供程序从持久字段或属性的类型推断出 Lob 类型。
对于基于字符串和字符的类型,默认值为 Clob。在所有其他情况下,默认值为 Blob。
还可以使用 @Column 属性 columnDefinition 进一步改进 Lob 类型。
此批注没有属性。有关更多详细信息,请参阅 API。
示例 1-46 显示了如何使用此批注指定持久字段 pic 应作为 Blob 进行持久保存。
示例 1-46 @Lob
@Entitypublic class Employee implements Serializable { ...
@Lob
@Basic(fetch=LAZY)
@Column(name="EMP_PIC", columnDefinition="BLOB NOT NULL")
protected byte[] pic; ...}
分享到:
相关推荐
默认情况下,JPA的关系加载是即时的(Eager),这意味着当父实体被加载时,其关联的一对多子实体也会一同加载。然而,通过使用延迟加载,我们可以减少不必要的数据库交互,提高应用性能。 三、关系维护 在JPA中,...
本资料主要探讨的是JPA中的一对多关系以及延迟加载机制,这两部分是JPA使用中的关键概念。 **一对多关系** 在关系数据库中,一对多关系是最常见的一种关联类型。例如,一个部门可以有多名员工,而每个员工只能属于...
JTechLog JPA 延迟加载 该程序是JTechLog( )博客上“JPA延迟加载”文章的示例程序。 提供了EclipseLink和Hibernate持久性提供程序的JPA延迟加载。 具有JPA持久层和Spring MVC Web层的双层应用程序。 可以用Maven...
4. **查询(Query)**: JPA提供了两种查询方式:JPQL(Java Persistence Query Language)和 Criteria API。JPQL是一种面向对象的查询语言,类似SQL,但操作的是实体而不是数据库表。Criteria API则提供了一个更强大...
默认情况下,关联的实体可能会立即加载(EAGER)。这可以通过在映射关系上设置`fetch = FetchType.EAGER`实现。 #### 5.2 延迟加载(LAZY) 延迟加载允许在需要时才加载关联的实体,提高性能。设置`fetch = ...
在这个"06_传智播客JPA详解_大数据字段映射与字段延迟加载"的自学视频中,我们将会深入探讨两个关键概念:大数据字段的映射和字段的延迟加载。 首先,让我们来理解大数据字段映射。在数据库中,有些字段可能包含...
在删除对象时,JPA提供了两种主要方式。一种是直接调用`remove()`方法,传入要删除的实体对象;另一种是先`detach()`对象,然后在查询中找到该对象并调用`remove()`。需要注意的是,删除操作通常是不可逆的,所以在...
在Java世界中,Java Persistence API(JPA)是Oracle公司主导的一个ORM(Object-Relational Mapping)标准,它提供了一种规范化的框架,用于管理关系数据库中的数据,并将其与Java对象进行映射。本篇文章将深入探讨...
延迟加载是一种优化策略,它使得关联的对象在真正需要时才从数据库中加载,而不是在加载主对象时立即加载所有关联对象。这样可以避免不必要的数据检索,提高应用程序的运行效率。 **2. Hibernate中的延迟加载** 在...
JPA是Java EE和Java SE环境中的一种ORM(Object-Relational Mapping)解决方案,旨在替代Hibernate等第三方库,提供更加标准化的持久化框架。 **JPA规范**定义了应用程序与数据库交互的一组接口和API,包括实体...
- **掌握JPA2的高级特性**:如延迟加载、缓存策略、查询优化等。 - **学习如何设计和实现持久化层**:使用JPA2进行实体建模,编写有效的JPQL查询,处理复杂的数据关系。 - **了解JPA2与Java EE 6的集成**:包括EJB、...
`mappedBy`属性用于指定反向映射的字段,`fetch`属性则用于指定加载策略,如`EAGER`立即加载或`LAZY`延迟加载。 - **多对多(Many-to-Many)**:这种关系涉及多个实体之间的关联。`@ManyToMany`注解用于映射这种...
- **定义**: JPA (Java Persistence API) 是由Sun官方提出的一种Java持久化规范,旨在简化Java应用程序中关系型数据库的操作过程。其核心目标是统一现有的ORM (Object-Relational Mapping) 框架,如Hibernate、...
5. **查询(Query)**:JPA提供了两种查询方式——JPQL(Java Persistence Query Language)和 Criteria API。JPQL类似于SQL,用于在对象层面上进行查询;Criteria API则提供了更面向对象的查询构建方式。 6. **...
**JPA(Java Persistence API)**是Java平台上用于管理关系数据库的数据持久化标准API,它为应用程序提供了一种对象/关系映射工具,将关系数据库中的数据与Java类对象关联起来,使得开发者可以使用面向对象的方式来...
- JPA支持两种事务管理方式:JTA(Java Transaction API)和Resource Local。 - JTA适用于企业级应用,由应用服务器管理事务。 - Resource Local适用于轻量级应用,由开发者在代码中控制事务。 5. **关联管理** ...
5. **查询(Query)**:JPA提供JPQL和Criteria API两种方式进行数据库查询,它们都是面向对象的查询语言。 通过学习和理解这些JPA实现及其批注,开发者可以有效地利用JPA来简化数据库操作,提高代码的可读性和可...
Java Persistence API(JPA)是Java平台上的一个标准,用于管理关系数据库中的对象持久化。它简化了在Java应用程序中存储、检索和管理数据的过程,是Enterprise JavaBeans(EJB)的一部分,也是Spring框架中的一个...
**Java Persistence API (JPA)** 是Java平台上的一个标准,用于管理关系数据库中的数据,它为开发者提供了一种对象关系映射(ORM)框架,使得开发者可以使用面向对象的方式来处理数据库交互,而无需直接编写SQL语句...
JPA的事务管理有两种方式:JTA(Java Transaction API)和RESOURCE_LOCAL。JTA是容器级别的事务,可以支持分布式事务,而RESOURCE_LOCAL是应用级别的事务。 在JPA中,对于实体的CRUD基本操作,其中涉及事务的是“C...