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 框架中,延迟加载(Lazy Loading)是一种优化数据访问性能的重要技术。它允许我们只在真正需要数据时才从数据库加载,避免一次性加载大量数据导致的内存消耗和性能瓶颈。当我们处理与实体相关的集合...
缓存、延迟加载、事务管理和锁定策略是提升Hibernate性能的四大关键要素。 **1. Hibernate缓存** 缓存机制是提高ORM框架性能的核心,它减少了对数据库的直接访问,从而提升了数据读取速度。Hibernate提供了三级缓存...
### Hibernate延迟加载详解 #### 一、什么是延迟加载?...总之,Hibernate的延迟加载机制是提高应用性能的重要手段之一。通过合理配置和使用这一机制,可以有效地优化应用程序的数据加载流程,提高用户体验。
Hibernate的延迟加载是一项强大的功能,可以帮助开发者构建高性能的应用程序。通过合理配置延迟加载,不仅可以优化内存使用,还可以提高应用程序的整体性能。然而,在使用延迟加载时,也需要考虑到其潜在的限制和...
### Hibernate延迟加载以及利用Spring #### 一、Hibernate延迟加载概念与原理 ...综上所述,通过合理的配置和编码实践,可以在Spring框架下有效地使用Hibernate的延迟加载功能,从而优化应用性能并减少内存消耗。
在Java的持久化框架Hibernate中,延迟加载(Lazy Load)是一项重要的优化策略,其核心目标是提高系统性能,减少内存占用,避免不必要的数据库交互。延迟加载允许我们在需要使用数据时才从数据库中加载,而不是在加载...
集合类型的延迟加载是Hibernate延迟加载机制中最能显著提升性能的部分。在Hibernate中,集合类型的延迟加载通过使用自定义的集合类实现,如`net.sf.hibernate.collection.Set`,而非标准的`java.util.Set`。这样,...
在Java的持久化框架Hibernate中,懒加载(Lazy Loading)是一种重要的优化策略,它的核心思想是“延迟加载”或“按需加载”。默认情况下,当一个实体被加载时,并不会立即加载其关联的对象或集合,而是在真正需要...
在Java的持久化框架Hibernate中,延迟加载(Lazy Loading)是一种优化数据库访问性能的技术。它允许我们在需要时才加载关联的对象,而不是在初始查询时就一次性加载所有数据。这有助于减少不必要的数据库交互,从而...
**延迟加载**(Lazy Loading)是Hibernate框架中的一个重要特性,主要用于优化数据库操作,减少不必要的数据加载,从而提升应用程序的性能。在传统的Eager Loading(急切加载)模式下,一旦加载了一个对象,与之相关的...
总之,Hibernate的延迟加载技术是一项强大的性能优化工具,它通过减少不必要的数据库交互,显著提升了应用的响应能力和资源利用率。然而,正确运用这一机制,尤其是在涉及复杂架构和设计模式的情况下,需要开发者...
总结来说,Hibernate的延迟加载机制是其性能优化的重要手段。通过合理使用实体对象、集合和属性的延迟加载,开发者可以在不影响程序功能的前提下,显著提升应用程序的运行效率。然而,需要注意的是,过度依赖延迟...
在 Hibernate 框架中,延迟加载(Lazy Loading)是一种非常重要的优化技术,它能够有效地减少数据库查询次数,提高应用性能。通常,在多对多或者一对多的关系中,延迟加载能够避免 N+1 查询问题。本文将详细探讨 ...
为了提高应用程序性能,Hibernate 提供了多种优化手段,其中“延迟加载(Lazy Loading)”是一种非常重要的性能优化技术。本文主要探讨 Hibernate 中的延迟加载机制及其具体应用场景。 #### 二、基本概念 延迟加载...
本案例主要探讨的是Hibernate的延迟加载(Lazy Loading)机制,这是一种优化数据库访问性能的重要策略。延迟加载允许我们在需要数据时才去加载,而不是在初始化对象时一次性加载所有关联数据,从而减少了内存消耗和...
在处理大数据量或者复杂数据结构时,Hibernate引入了延时加载(Lazy Loading)机制,以提高应用程序的性能。本文将深入探讨在JSP(JavaServer Pages)环境中,如何理解和应对Hibernate的延时加载问题。 首先,我们...