在
Spring+Hibernate的集成环境里,如果DAO直接使用HibernateDaoSupport的getSession()方法获取
session进行数据操作而没有显式地关闭该session,那么程序表现为:每个session会打开一个connection,并且
connection会一直保持(因为没有显式地close).如果程序使用了c3p0连接池,则因为c3p0连接池默认最大连接数是15,程序会表现为
当打开第15个连接时,程序处于停滞状态,等待从连接池获取新的连接.
在同样条件下,使用HibernateTemplate进行数据操作,就没有连接数持续增长的情况,程序结束时连接数归零.这印证了spring文档
上所说:HibernateTemplate会对session进行了管理,能够确保Session实例的正确打开和关闭.
需要注意的是:在Spring环境里,即使我们使用Hibernate原生的API,比如这里所说的使用HibernateDaoSupport的
getSession()方法得到Session进行数据操作(而不是使用Spring自己提供的API,比如HibernateTemplate),这
些操作也依然会被纳入spring管理的事务中去.原因是通过getSession()方法得到Session是一个绑定到当前事务上的session.
此处可参考:http://www.javaeye.com/topic/110801.这就是为什么Spring文档中提到的:You can
implement DAOs based on the plain Hibernate 3 API, while still being
able to participate in Spring-managed transactions.
如果程序使用了OpenSessionInViewFilter或者OpenSessionInViewInterceptor那将是另外一种情形了.
简单总结:
HibernateDaoSupport的getSession()得到的Session会参与Spring管理的事务中,但是不能自动的关闭.
HibernateTemplate
除能参与到
Spring管理的事务中,还
能够确保Session实例的正确打开和关闭.
分享到:
相关推荐
3. `getSession()`: 提供对当前事务上下文中的Session的访问,这对于执行HQL或SQL查询非常有用。 接下来,我们谈谈`@Autowired`。这是Spring框架的一个关键注解,用于实现依赖注入(Dependency Injection, DI)。DI...
通过上述步骤,我们了解了如何使用`hibernateDaoSupport`类来简化Hibernate与Spring的集成。这种方法不仅提高了代码的可读性和可维护性,还大大减少了开发过程中的错误可能。在实际开发过程中,开发者可以根据项目...
为了简化Hibernate与Spring的整合,Spring提供了`HibernateTemplate`类,它是一个封装了Hibernate Session的工具类,使得在处理数据库操作时更加方便。`HibernateTemplate`在事务管理、异常转换等方面提供了很多便利...
为了简化Hibernate与Spring的集成,Spring提供了HibernateTemplate类,它是Spring对Hibernate的一种封装,使得在DAO层操作数据库变得更加简便和安全。 首先,我们来看如何在DAO中使用HibernateTemplate。通常,DAO...
特别是在企业级应用中,为了实现高效的数据库操作与管理,开发者经常需要对数据进行分页查询及模糊查询。本文将详细介绍如何利用`getHibernateTemplate()`方法结合Spring框架进行分页查询和模糊查询。 #### 二、...
- **HibernateDAOSupport**:继承此类可以自动获得SessionFactory,通过getSession()方法获取Session。 - **HibernateTemplate**:提供了一系列的方法来执行CRUD(Create, Read, Update, Delete)操作,以及查询、...
在DAO实现中,可以继承`HibernateDaoSupport`,并通过`setSessionFactory`方法注入`SessionFactory`,以获得对`HibernateTemplate`的访问,从而执行HQL查询和CRUD操作。 8. **数据访问异常处理**: `getSession()`...
最后,为了在业务逻辑中使用Hibernate,我们可以创建一个DAO层,通过Spring的`HibernateTemplate`或`HibernateDaoSupport`抽象类来简化操作。例如: ```java @Service public class MyEntityDaoImpl implements ...