标签:
本文是作者在对hibernate4+spring3+struts2整合中遇到的一个问题。对s2sh进行了基本的整合搭建以后,就是对事务的控制管理,将hibernate的事务交由spring管理。根据网上资料,applicationContext.xml中基本的配置如下(注意先后顺序的问题):
配置事务时应该加载aopalliance-1.0.jar和aspectjweaver.jar这两个包,这两个包是必须的。以为这样就可以对事务进行控制了,但是没有想到在测试的时候发现dao层中的save、delete等方法都不能进行持久化。最终发现是取到的session不能为sessionFactory.openSession(),而是应该为sessionFactory.getCurrentSession().同时应该在配置为文件中的propagation传播方式最好为required。这是因为当有一个方法list 传播行为为Supports,当在另一个方法getPage()(无事务)调用list方法时会抛出org.hibernate.HibernateException: No Session found for current thread 异常。
根本原因是getCurrentSession()在没有session的情况下不会自动创建一个,因此最好的解决方案是使用REQUIRED的传播行为。
现在知道事务的配置了,下面来看一下怎么使用事务管理。
dao层部分代码:
service层部分代码:
action层部分代码:
applicationContext.xml配置文件后面增加如下代码:
struts.xml的部分配置内容如下:
注意:struts也是交与spring管理,如上的struts.xml中的class=“empAction”,会到spring的配置文件找id为empAction的bean,从而找到具体的实现类。
标签:
原文地址:http://www.cnblogs.com/LuckyBao/p/5979234.html