`
beyondqinghua
  • 浏览: 42386 次
  • 性别: Icon_minigender_1
  • 来自: 南昌
社区版块
存档分类
最新评论

hibernate lazy的问题学习总结

    博客分类:
  • JEE
阅读更多

   以前碰到一个延迟加载问题,就是lazy=true的时候出现session close后读取不到数据,出现错误,现在这里总结一下经验:

一:lazy=false,这种方式效率底,不合适.

二:fetch=join,这种方式和上一种差不多.

三:使用OpensessionInView,这种方式事务管理有很多不稳定性(主要存在事务边界的不确定性),此时lazy=true.

四:就是在DAO层把数据read出来,lazy=true,这样不符合ORM关联查询思想.

五:个人认为最佳方案,就是使用动态外连接查询,此时lazy=true.

分享到:
评论
1 楼 beyondqinghua 2008-06-03  
这段时间又碰到了问题,发现还是没有效果,对lazy和fetch的作用认识还不够.

原本以为设置lazy="true",在hql中指定outer join就会导航到对应的子数据中去,但是实际却令人失望.最后,为了达到预期效果,不得不使用fetch属性来实现预期效果.

fetch参数指定了关联对象抓取的方式是select查询还是join查询,select方式时先查询返回要查询的主体对象(列表),再根据关联外键id,每一个对象发一个select查询,获取关联的对象,形成n+1次查询;
而join方式,主体对象和关联对象用一句外键关联的sql同时查询出来,不会形成多次查询。
如果你的关联对象是延迟加载的,它当然不会去查询关联对象。
另外,在hql查询中配置文件中设置的join方式是不起作用的(而在所有其他查询方式如get、criteria或再关联获取等等都是有效的),会使用select方式,除非你在hql中指定join fetch某个关联对象。

相关推荐

    hibernate学习总结文档

    **Hibernate 框架概述** Hibernate 是一个开源的对象关系映射(ORM)框架,它为 Java 开发者提供了一种在 Java 应用程序中管理关系...通过实践和深入学习,你可以更好地利用 Hibernate 实现高效、可靠的数据库应用。

    J2EE系统之-hibernate学习总结

    ### J2EE系统之-hibernate学习总结 #### 对象持久化理论 - **对象持久化定义**:将对象中的数据转换存储至外部持久性存储设备的过程,如数据库、磁盘等。 - **对象持久化的原因**: - 内存易失性:断电后数据丢失...

    hibernate源码的学习

    总结,学习Hibernate源码有助于我们理解ORM的底层实现,掌握对象关系映射的精髓,从而在实际项目中更好地利用Hibernate提升开发效率和代码质量。通过对"hibernate-one2many"的分析,我们可以深入研究和实践一对一和...

    Hibernate框架的学习PPT课件

    总结来说,Hibernate是Java开发中的重要工具,通过理解其核心组件、工作流程和优势,以及熟练使用查询API,开发者可以更高效地进行数据库操作,提高开发效率。对于想要深入学习Java EE的开发者,掌握Hibernate框架是...

    hibernate的知识总结

    - **Hibernate生成策略**:可以通过注解`@Basic`来声明属性的存取策略,例如延迟获取(`FetchType.LAZY`)或即时获取(`FetchType.EAGER`)。 - **时间精度映射**:通过`@Temporal`注解定义映射到数据库的时间精度,...

    Hibernate重点总结

    **Hibernate核心知识点详解** Hibernate是一款强大的Java对象关系映射(ORM)框架,它极大地简化了数据库操作,使得开发者可以...阅读提供的"Hibernate.pdf"文档将进一步深入理解这些概念,并提供实际示例帮助学习。

    hibernate面试题总结

    Hibernate是Java领域中一款流行的持久...以上就是Hibernate面试中常见的问题和答案,涵盖了基本概念、缓存策略、查询方式以及事务和数据访问等方面的知识点。理解并掌握这些内容对于深入学习和使用Hibernate至关重要。

    hibernate大纲

    1. **延迟加载(Lazy Loading)**:按需加载关联对象,减少不必要的数据库访问。 2. **批处理(Batch Processing)**:通过设置 `hibernate.jdbc.batch_size` 提高批量操作性能。 3. **缓存策略**:合理利用缓存减少...

    hibernate-jpa学习

    总结,Hibernate-JPA作为Java ORM的重要实现,为开发者提供了丰富的功能和灵活的工具,使得数据库操作变得简单而高效。通过深入学习其原理和实践应用,开发者能够更好地应对复杂的业务场景,提升软件系统的质量和可...

    Hibernate中文详细学习文档

    19.1.7. 使用延迟属性抓取(Using lazy property fetching) 19.2. 二级缓存(The Second Level Cache) 19.2.1. 缓存映射(Cache mappings) 19.2.2. 策略:只读缓存(Strategy: read only) 19.2.3. 策略:读/...

    Hibernate知识点总结(一).docx

    此外,Hibernate还支持懒加载(Lazy Loading)、级联操作(Cascading)、集合映射(Collection Mapping)等高级特性。懒加载允许我们在需要时才加载关联的对象,以优化性能。级联操作则可以在操作主对象时自动处理...

    hibernate最新学习手册

    总结:本“Hibernate最新学习手册”深入浅出地介绍了Hibernate的核心概念、配置、操作实体、查询、缓存、锁机制以及各种关联映射方式,无论你是初学者还是经验丰富的开发者,都能从中受益,提升数据库操作的效率与...

    Hibernate学习总结

    ### Hibernate学习总结 #### 一、Hibernate框架简介 Hibernate是一个开放源代码的ORM(Object Relational Mapping)框架,它对JDBC进行了非常轻量级的对象封装,使得Java开发人员可以使用对象编程思想来操作数据库。...

    hibernate总结练习源码

    本资源包含的"hibernate总结练习源码"提供了对Hibernate ORM框架实际应用的实例,有助于深入理解和掌握其核心概念与功能。 1. **对象关系映射(ORM)**:Hibernate 提供了一种机制,将数据库中的表映射为Java类,表...

    hibernate学习入门一对多实体映射源码

    总结,本教程通过"hibernate学习入门之一对多实体映射源码"引导初学者理解如何在Hibernate中建立和操作一对多的关系。通过源码学习,开发者可以更好地理解实体之间的关联以及如何在实际项目中有效地运用这些关系。

    hibernate框架2016

    笔记详细记录了学习过程中的重点和难点,可能包括每个day的学习目标、关键概念解释、常见问题及解决方法等。 总结,这个压缩包提供的资料全面覆盖了Hibernate框架2016年的核心知识点,无论你是初学者还是进阶者,都...

    hibernate架包3.2

    同时,Hibernate支持延迟加载(Lazy Loading),避免了内存中的数据过多导致的性能问题。 在实际开发中,结合Spring和Struts使用SSH框架,可以构建出松耦合、可维护性高的企业级应用。Spring负责管理对象生命周期和...

    hibernate 开发文档发布

    《Hibernate 开发文档详解》 ...通过阅读和实践,开发者不仅可以学习到如何使用Hibernate进行数据库操作,还能了解到ORM框架的设计思想和最佳实践,从而在实际项目中更好地利用Hibernate提升开发效率和应用质量。

    hibernate源码

    总结,Hibernate源码的学习不仅能帮助开发者理解ORM框架的设计原理,还能提升数据库操作的效率和代码的可维护性。通过对源码的深入研究,我们可以更好地利用Hibernate提供的功能,优化我们的应用,同时也能为自己的...

Global site tag (gtag.js) - Google Analytics