HibernateDaoSupport getSession()不能释放资源的问题及解决方法<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

核心提示:1、使用手动释放资源: Sessionsession=getSession(); //代码 //Queryquery=session.createQuery(hql); //query.list(); releaseSession(session); 另外还可以用getHibernateTemplate()来代替。 2、使用注解@Transactional管理事务 这个需要注解驱动: tx:an

1 、使用手动释放资源:

1.      Session session = getSession();   

2.      // 代码   

3.      //Query query= session.createQuery(hql);  

4.      //query.list();   

5.      releaseSession(session);   

另外还可以用getHibernateTemplate()来代替。

2 、使用注解@Transactional管理事务

这个需要注解驱动:

1.     <tx:annotation-driven   transaction-manager = "transactionManager"  

2.                         proxy-target-class = "true"   />   

在使用类或者方法上用@Transactional注解即可。

3 、不使用注解来管理事务,使用声明式事务管理

1.     <tx:advice   id = "txAdvice"   transaction-manager = "transactionManager" >   

2.               <tx:attributes>   

3.                         <tx:method   name = "get*"   read-only = "true"   />  

4.                         <tx:method   name = "*"   />   

5.                </tx:attributes>   

6.        </tx:advice>   

7.     <aop:config>   

8.                <aop:pointcut   id = "MyDaoOperation"

9.                     expression = "execution(* x.y.dao.MyDAO.*(..))"   />

10.             <aop:advisor   advice-ref = "txAdvice"   pointcut-ref = "MyDaoOperation"   />   

11.  </aop:config>   

或者

1.     <aop:config>   

2.                <aop:pointcut   id = "daoOperation"   

3.                         expression = "execution(* x.y.dao.*.*(..))"   />

4.                <aop:advisor   advice-ref = "txAdvice"   pointcut-ref = "daoOperation"   />   

5.     </aop:config>   

  其他事务配置方法参考spring文档或

4 、添加openSessionInView,该方法没有亲自测试。

注:123种方法亲自测试过可以使用,最好的方法是配置spring事务,如果存在

HibernateDaoSupport getSession() 连接占用问题,就要检查其spring事务管理的配置是否正确。