`

Hibernate性能问题:延迟加载

阅读更多
HibernateDaoSupper对hibernate的支持
用getHibernateTemplate(),不支持延迟加载,因为它的session一用完就关闭;
用getSession()可以支持延迟加载,而session的关闭也是Spring的事物帮你关闭它.不需要你动手。
例子与区别:
public Instructor findInstructorById(Integer id) {
         return (Instructor) getHibernateTemplate().get(Instructor.class, id);
}


public Instructor findInstructorById(Integer id) {
		return (Instructor)getSession().get(Instructor.class, id);
		
	}


BeanFactory ac = new FileSystemXmlApplicationContext(
			"WebRoot/WEB-INF/applicationContext.xml");
InstructorDao instructorDao=(InstructorDao)ac.getBean("instructorDao");
Instructor instructor=instructorDao.findInstructorById(1);
System.out.println(instructor.getName());
System.out.println(instructor.getCourses().size());


getHibernateTemplate()的结果(出异常了):
Hibernate: select instructor0_.id as id0_0_, instructor0_.name as name0_0_, instructor0_.password as password0_0_ from instructor instructor0_ where instructor0_.id=?
tiger
org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: com.huanglq.model.Instructor.courses, no session or session was closed
	at org.hibernate.collection.AbstractPersistentCollection.throwLazyInitializationException(AbstractPersistentCollection.java:358)
	at org.hibernate.collection.AbstractPersistentCollection.throwLazyInitializationExceptionIfNotConnected(AbstractPersistentCollection.java:350)
	at org.hibernate.collection.AbstractPersistentCollection.readSize(AbstractPersistentCollection.java:97)
	at org.hibernate.collection.PersistentSet.size(PersistentSet.java:114)
	at com.huanglq.test.Test.main(Test.java:41)


getSession()的结果:
Hibernate: select instructor0_.id as id0_0_, instructor0_.name as name0_0_, instructor0_.password as password0_0_ from instructor instructor0_ where instructor0_.id=?
tiger
Hibernate: select courses0_.id as id1_, courses0_.id as id3_0_, courses0_.instructor_id as instructor2_3_0_, courses0_.name as name3_0_, courses0_.state as state3_0_, courses0_.startDate as startDate3_0_, courses0_.endDate as endDate3_0_, courses0_.description as descript7_3_0_, courses0_.maxstudentcount as maxstude8_3_0_ from course courses0_ where courses0_.id=?
Hibernate: select students0_.course_id as course2_1_, students0_.stu_id as stu1_1_, student1_.id as id1_0_, student1_.name as name1_0_, student1_.password as password1_0_, student1_.age as age1_0_, student1_.address as address1_0_, student1_.state as state1_0_, student1_.phone as phone1_0_, student1_.email as email1_0_, student1_.zip as zip1_0_, student1_.description as descrip10_1_0_ from stu_cour students0_ left outer join student student1_ on students0_.stu_id=student1_.id where students0_.course_id=?
1
分享到:
评论

相关推荐

    Hibernate集合属性的延迟加载.doc

    在 Hibernate 框架中,延迟加载(Lazy Loading)是一种优化数据访问性能的重要技术。它允许我们只在真正需要数据时才从数据库加载,避免一次性加载大量数据导致的内存消耗和性能瓶颈。当我们处理与实体相关的集合...

    Hibernate性能(缓存 延迟加载 事务 悲观 乐观锁).ppt

    性能------------缓存 延迟加载 事务 悲观 乐观锁

    hibernate延迟加载解决

    在大型项目中,由于数据量庞大,为了提高性能和减少数据库的负载,Hibernate引入了“延迟加载”(Lazy Loading)机制。标题和描述提到的“hibernate延迟加载解决”主要涉及如何理解和解决与之相关的常见问题。 **1....

    Hibernate 延迟加载剖析与代理模式应用

    Hibernae 的延迟加载是一个非常常用的技术,实体的集合属性默认会被延迟加载,实体所关联的实体默认也会被延迟加载。Hibernate 通过这种延迟加载来降低系统的内存开销,从而保证 Hibernate 的运行性能。

    Hibernate lazy延迟加载

    在Java的持久化框架Hibernate中,懒加载(Lazy Loading)是一种重要的优化策略,它的核心思想是“延迟加载”或“按需加载”。默认情况下,当一个实体被加载时,并不会立即加载其关联的对象或集合,而是在真正需要...

    Hibernate延迟加载介绍.doc

    总结来说,Hibernate的延迟加载机制是其性能优化的重要手段。通过合理使用实体对象、集合和属性的延迟加载,开发者可以在不影响程序功能的前提下,显著提升应用程序的运行效率。然而,需要注意的是,过度依赖延迟...

    Hibernate延迟加载

    4. 单端关联(One-to-one, many-to-one)的延迟加载:`<one-to-one>`和`<many-to-one>`元素的`lazy="proxy"`、`lazy="false"`或`lazy="noproxy"`可以控制关联对象的延迟加载行为。`lazy="proxy"`会在访问关联对象时...

    Hibernate延迟加载案例 (多: 一: 一,附代码)

    本案例主要探讨的是Hibernate的延迟加载(Lazy Loading)机制,这是一种优化数据库访问性能的重要策略。延迟加载允许我们在需要数据时才去加载,而不是在初始化对象时一次性加载所有关联数据,从而减少了内存消耗和...

    【北大青鸟内部教程】jsp中关于Hibernate延时加载的问题

    在处理大数据量或者复杂数据结构时,Hibernate引入了延时加载(Lazy Loading)机制,以提高应用程序的性能。本文将深入探讨在JSP(JavaServer Pages)环境中,如何理解和应对Hibernate的延时加载问题。 首先,我们...

    ssh_inte2模板常用方法&延迟加载问题

    在这个主题中,我们主要关注的是如何在使用SSH inte2模板时处理“延迟加载”问题,以及相关的方法。 延迟加载(Lazy Loading)是Hibernate的一种优化策略,它允许我们在需要时才加载关联的对象,而不是在加载主对象...

    延迟加载技术

    因此,合理地权衡性能优化与用户体验,恰当使用缓存策略,以及预加载技术,是实施延迟加载时需要考虑的关键问题。 总的来说,延迟加载是一种高效的技术,它通过推迟非关键资源的加载,优化了系统性能,改善了用户...

    Hibernate性能优化

    《Hibernate性能优化》 在Java应用开发中,Hibernate作为一个强大的对象关系映射(ORM)框架,极大地简化了数据库操作。然而,如果不进行适当的优化,它可能会成为系统性能的瓶颈。以下是一些关于Hibernate性能优化...

    Hibernate提升性能Hibernate提升性能

    因此,平衡延迟加载和立即加载的使用,结合合适的批量抓取策略,是提高Hibernate性能的关键。 总的来说,理解并熟练运用Hibernate的抓取策略,能够帮助开发者创建更高效的数据访问层,降低系统开销,从而提升整体...

    延迟加载、迫切加载的用法

    在后端开发中,ORM(对象关系映射)如Hibernate支持延迟加载和迫切加载的配置;在数据库设计中,SQL的JOIN操作可以根据需求选择延迟或迫切加载关联数据。 总之,延迟加载和迫切加载是优化资源管理、提升性能的重要...

    hibernate抓取策略和懒加载案例

    这可能导致大量的数据库查询,但避免了后续的延迟加载。 2. Lazy Fetching(懒加载):主对象加载时不加载关联对象,只有在真正需要时才执行额外的SQL查询来获取。这是Hibernate的默认策略,有助于减少不必要的...

    如何提高hibernate性能

    【提高Hibernate性能】 在开发大型企业级应用时,ORM框架如Hibernate在处理大量数据时可能会出现性能瓶颈。针对这种情况,优化Hibernate的配置和使用策略至关重要。以下是一些提高Hibernate性能的关键点: 1. **...

    day36-hibernate检索和优化 02-Hibernate检索方式:简单查询及别名查询

    2. **懒加载**:通过延迟加载(Lazy Loading),只有在真正需要关联对象时才会加载它们,减少不必要的数据传输。 3. **批处理**:通过设置批处理大小,可以一次获取多个结果,减少数据库连接的开销。 4. **预加载**...

    属性延迟加载

    Hibernate3开始增加了通过property节点的lazy属性,为特定的属性指定延迟加载策略,以避免实体整体加载可能带来的性能浪费,尤其是像长文本之类的大字段。那么实现属性延迟加载需要做两件事: 1.修改映射配置...

    hibernate延迟机制分析

    在Java的持久化框架Hibernate中,延迟加载(Lazy Loading)是一种优化策略,旨在提高应用程序的性能和效率。当一个实体的某个属性是一个关联的集合,如一对多的关系,Hibernate默认会采用延迟加载机制。这意味着在...

Global site tag (gtag.js) - Google Analytics