延迟加载:在Hibernate里面,为了避免关联关系带来无谓的性能开销。
延迟加载导致的问题,一方面存在session关闭了,另一方面,试图通过Session获取实际的数据,则报出异常:Failed to lazily initialize a collection - no session or session is closed
这样场景是存在的。
解决方案如下:
Hibernate.initialize(user.getAddress());
session.close();
Set set = user.getAddresses();
为了实现透明化延迟加载机制,hibernate进行了大量努力,其中包括JDK中的Collection接口的独立实现。
如果你尝试:
Set set = (java.util.HashSet)user.getAddresses();
注:Hibernate对Conllection自身的实现:net.sf.hibernate.collection.Set。
其实会报ClassCaseException异常。因为Hibernate是对Collection接口的独立实现,而非本事JDK中的Collection接口下实现类(HashSet,HashMap)。
这也是为什么我们必须编写POJO对象涉及Set,Map而非特定JDK的Collection接口下实现类(HashSet,HashMap)。
Hibernate由于Collection自身的实现,从容完成了从Collection这层的延迟加载特性。只有程序真正访问或者读取这个Collection时,才激发Hibernate封装的底层数据库操作。(我们可以想象,,其实也是这种应该可以通过观察者模式来通知封装的底层JDBC组件,反射机制也肯定用到了,不然怎么判断Collection这种属性和geter/setter这种行为)
分享到:
相关推荐
在Hibernate框架中,Session是与数据库交互的主要接口,它负责对象的持久化操作。然而,由于Session不是线程安全的,所以在多线程环境中管理Session就需要特别注意。本篇文章将详细探讨Hibernate中Session的管理,...
在文件名“hibernate_lazy_for_collection”中,“collection”通常指的是集合,如List、Set或Map,这暗示了讨论可能聚焦于Hibernate如何对集合类型的关联对象进行懒加载。在Hibernate中,当一个实体类与多个其他...
在标准的关系型数据库设计中,一对多关系意味着一个表中的记录可以与另一个表中的多个记录相关联。例如,一个部门可以有多名员工,而每个员工只属于一个部门。在Hibernate中实现这种关系,我们不一定要依赖主键作为...
10. **一对多、多对一、一对一和多对多关系映射**:Hibernate支持多种关联映射,包括集合映射,如List、Set、Map等,以及复合主键的处理。 11. **继承映射**:在Java中,子类可以继承父类。在Hibernate中,这种继承...
6. **集合映射**:在处理一对多、多对多关联时,Hibernate提供了List、Set、Map等多种集合类型的映射,以及有序和无序、唯一和非唯一的区别。 7. **延迟加载(Lazy Loading)**:为了优化性能,Hibernate允许对象的...
- Hibernate 支持 List、Set、Map 等多种集合类型映射,通过 @OneToMany 和 @ManyToMany 注解配置关联表和中间表。 9. **延迟加载与立即加载** - 延迟加载(Lazy Loading)在需要时才加载关联对象,节省资源。 -...
8. **延迟加载(Lazy Loading)**:Hibernate支持懒加载机制,只有当真正需要访问关联对象时,才会发起数据库查询。 9. **集合映射**:Hibernate支持多种集合类型的映射,如List、Set、Map等,以及一对一、一对多、多...
8. **缓存策略**:Hibernate提供了缓存机制,如一级缓存(Session级别)和二级缓存(SessionFactory级别),可以优化一对多关联的性能。 9. **最佳实践**:在实际应用中,应考虑数据量、性能需求和业务逻辑来选择...
10. **集合映射**:Hibernate支持多种集合类型(如List、Set、Map等)与数据库表中的多对一、一对多、多对多关系的映射。 11. **事件监听器**:Hibernate允许注册事件监听器,对持久化对象的各种操作(如保存、更新...
Hibernate支持一对一、一对多、多对一和多对多关系映射,如List、Set、Map等集合类型,通过配置XML映射文件来实现复杂的数据结构。 10. **延迟加载与立即加载** 延迟加载(Lazy Loading)是Hibernate的一个重要...
8. **多对一、一对多、多对多关联映射**:Hibernate支持多种关联映射,如实体类之间的单向和双向关联,以及集合类型的关联,如Set、List和Map。 9. **延迟加载(Lazy Loading)**:Hibernate的懒加载机制可以优化...
在关系数据库中,集合类型的数据(如Set、List、Map)不能直接存储,而Hibernate提供了将这些集合类型映射到数据库中的机制,如使用`Set`和`Map`映射关联关系,这使得Java对象的集合属性可以直接与数据库中的记录...
10. **集合映射**:Hibernate支持多种集合类型(如List、Set、Map等)与数据库表之间的映射,以及一对一、一对多、多对多关系的处理。 11. **事件监听器**:Hibernate允许注册事件监听器,以便在特定的持久化操作...
10. **集合映射**:在Java中,List、Set、Map等集合可以映射到数据库的表,通过集合属性,可以方便地处理集合与数据库表的关联。 通过这份“Hibernate学习课件”,你可以系统地学习和实践Hibernate的各项功能,理解...
11. **延迟加载(Lazy Loading)**:为提高性能,Hibernate允许某些关联关系在需要时才加载,避免了不必要的数据库查询。 12. **事件监听器**:Hibernate提供了一些预定义的事件,如保存、更新、删除等,可以通过...
-懒加载和立即加载策略,以及如何优化关联加载性能。 4. **AJAX插件应用**: - AJAX基础:理解异步JavaScript和XML,如何通过XMLHttpRequest对象实现页面局部更新。 - jQuery与AJAX:使用jQuery简化AJAX调用,...
7. **延迟加载(Lazy Loading)**:Hibernate的懒加载策略允许只在真正需要时加载关联对象,避免了不必要的数据库访问,提高了性能。 8. **实体生命周期**:Hibernate定义了实体的几种状态(瞬时、持久、脱管)以及...
10. **延迟加载与立即加载**:理解Hibernate的懒加载和Eager加载策略,以及如何在映射文件中配置它们。 11. **实体的生命周期**:了解Hibernate中持久化对象的四种状态(瞬时态、托管态、持久态、游离态)及其转换...
8. **延迟加载和懒加载**:Hibernate支持延迟加载(Lazy Loading),默认情况下关联对象不会立即加载,只有在真正需要时才从数据库中获取,有效避免了内存浪费。 9. **集合映射**:Hibernate支持多种类型的集合映射...