JPA的延时加载分成两种情况1.表间的延时加载,2.表中属性的延时加载,比如大型字段blob,需等到使用时在加载,效率才比较高
首先,1.表间的延时加载
JPA中数据获取(Fectching)有两种方式:Eager和Lazy。明白他们之间的差异和知道何时应用哪种方式对于有效率地进行数据库操作非常关键。
Lazy: 只有需要的时候才将相关联的实体取出
Eager: 一次将所有相关联的实体取出
使用的方法如下:
java 代码
@OneToMany(fetch=FetchType.EAGER)
-
publicCollection<Empolyee>getEmpolyees(){
-
returnempolyees;
-
}
关系类型后使用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; ...}
分享到:
相关推荐
JTechLog JPA 延迟加载 该程序是JTechLog( )博客上“JPA延迟加载”文章的示例程序。 提供了EclipseLink和Hibernate持久性提供程序的JPA延迟加载。 具有JPA持久层和Spring MVC Web层的双层应用程序。 可以用Maven...
本资料主要探讨的是JPA中的一对多关系以及延迟加载机制,这两部分是JPA使用中的关键概念。 **一对多关系** 在关系数据库中,一对多关系是最常见的一种关联类型。例如,一个部门可以有多名员工,而每个员工只能属于...
本教程“11_传智播客JPA详解_JPA中的一对多延迟加载与关系维护”聚焦于JPA在处理一对多关系时的延迟加载机制以及如何有效地维护这些关系。 一、JPA一对多关系 在数据库中,一对多关系意味着一个实体可以与多个其他...
延迟加载允许在需要时才加载关联的实体,提高性能。设置`fetch = FetchType.LAZY`实现。需注意,懒加载在实体已脱管时无法工作。 ### 6. JPA事务管理 JPA支持编程式和声明式事务管理。声明式事务管理更常见,通过...
在这个"06_传智播客JPA详解_大数据字段映射与字段延迟加载"的自学视频中,我们将会深入探讨两个关键概念:大数据字段的映射和字段的延迟加载。 首先,让我们来理解大数据字段映射。在数据库中,有些字段可能包含...
在大型项目中,由于数据量庞大,为了提高性能和减少数据库的负载,Hibernate引入了“延迟加载”(Lazy Loading)机制。标题和描述提到的“hibernate延迟加载解决”主要涉及如何理解和解决与之相关的常见问题。 **1....
- **掌握JPA2的高级特性**:如延迟加载、缓存策略、查询优化等。 - **学习如何设计和实现持久化层**:使用JPA2进行实体建模,编写有效的JPQL查询,处理复杂的数据关系。 - **了解JPA2与Java EE 6的集成**:包括EJB、...
JPA用于整合现有的ORM技术,可以简化现有Java EE和Java SE应用对象持久化的开发工作,实现ORM的统一。JPA详解视频教程 第6讲 大数据字段映射与字段延迟加载.avi
字段延迟加载是JPA的一个特性,用于提高性能,只在需要时加载相关数据,通过@Lob和基本的懒加载策略实现。 **7. 使用JPA加载_更新_删除对象** JPA提供了加载(find, persist, merge, refresh, detach等方法)、更新...
`mappedBy`属性用于指定反向映射的字段,`fetch`属性则用于指定加载策略,如`EAGER`立即加载或`LAZY`延迟加载。 - **多对多(Many-to-Many)**:这种关系涉及多个实体之间的关联。`@ManyToMany`注解用于映射这种...
9. **懒加载和级联操作**:懒加载可以延迟加载关联的对象,直到真正需要时才获取,节省资源。级联操作则可以在操作一个实体时,同时影响与其关联的其他实体。 10. **转换和验证**:JPA提供了转换机制,如@Convert,...
在Java的持久化框架Hibernate中,懒加载(Lazy Loading)是一种重要的优化策略,它的核心思想是“延迟加载”或“按需加载”。默认情况下,当一个实体被加载时,并不会立即加载其关联的对象或集合,而是在真正需要...
- 延迟加载(`@Lazy`)是处理一对多关联时的一个重要特性,有助于优化性能。 - **多对多关联**: - 多对多关系通过`@ManyToMany`注解表示,并且通常需要通过`@JoinTable`指定连接表。 - 这种关联方式可以表示两个...
- 使用预加载(FetchType.EAGER)或延迟加载(FetchType.LAZY)策略。 - 分批加载(Batch Fetching):一次性获取一组关联对象。 - 避免N+1查询问题,合理设计JPA QL语句。 10. **版本控制与乐观锁** - JPA支持...
- **延迟加载(Lazy Loading)增强**:通过引入`FetchType.LAZY`,可以更精细地控制属性的加载时机。 - **查询语言JPA QL的扩展**:包括集合函数、子查询、构造函数表达式等。 - **Criteria API的增强**:提供了...
6. **延迟加载(Lazy Loading)**:默认情况下,关联关系在需要时才加载,以提高性能。 7. **实体监听器(Entity Listeners)**:允许在特定的生命周期事件上注册回调方法,进行额外的业务逻辑处理。 8. **转换和...
在Spring与Hibernate整合时,延迟加载功能可能会遇到问题,因为Spring通过HibernateTemplate或JPA的EntityManager对数据库操作进行了抽象和封装。这种封装在提高代码可维护性的同时,可能导致在方法执行完毕后,...
3. **延迟加载(Lazy Loading)**: 默认情况下,关联关系采用延迟加载策略,只有在真正需要时才会加载,提高了性能。 4. **集合转换(Collection Transformations)**: 可以在查询结果上进行转换,比如将查询到的...
使用`@OneToMany`注解,可以设置`fetch`策略(默认为`LAZY`,表示延迟加载)和`cascade`属性(如`CascadeType.ALL`,表示级联操作)。 3. **多对一(ManyToOne)**: 多个实体可以关联到一个实体,如多个学生属于一...
- **懒加载和级联操作**: 提供了对象关联的延迟加载和级联操作功能。 7. **注意事项** - **性能优化**: 需要合理设置缓存策略、批处理和懒加载,避免N+1查询问题。 - **事务边界**: 正确管理事务边界,确保数据...