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,该方法没有亲自测试。
注:1、2、3种方法亲自测试过可以使用,最好的方法是配置spring事务,如果存在
HibernateDaoSupport getSession()
连接占用问题,就要检查其spring事务管理的配置是否正确。
转载于:https://blog.51cto.com/youxue/337861