HibernateDaoSupport getSession()不能释放资源的问题及解决方法
核心提示: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事务管理的配置是否正确。