日期:2014-05-18  浏览次数:20721 次

spring事物问题
我已经在spring的配置文件中配置好了一个事物代理
<bean   id= "employeeDaoProxy "
class= "org.springframework.transaction.interceptor.TransactionProxyFactoryBean ">
<property   name= "proxyInterfaces ">
<list>
<value> com.IEmployee </value>
</list>
</property>

<property   name= "target ">
<ref   bean= "employeeHibernateDao "   />
</property>

<property   name= "transactionManager ">
<ref   bean= "hibernateTransactionManager "   />
</property>

<property   name= "transactionAttributeSource ">   <!--   我的事物属性源使用的是spring默认的属性源   -->
<ref   bean= "matchAlwaysTransactionAttributeSource "/>
</property>
</bean>


现在问题是如何做事物操作?
比如employeeHibernateDao这个类里面有一个方法叫add
public   void   add()
{
      Employee   employee=new   Employee   ();
      employee.setUserid( "001 ");
      getHibernateTemplate().save(employee);
        employee.setUserid( "001 ");
      getHibernateTemplate().save(employee);
}
我这里故意让他主键起冲突,连续插入两次001,但是结果不会回滚呀.第一次插入的001插入到了数据库,第二次异常了.按事物的机制因该是只要其中一次失败就回滚.
刚刚接触spring不长时间,有点不太明白.spring这样把事物封装起来了,导致我无法控制事物的提交了.
如果过去在hibernate里,只有当我tr.comit()后,才能将之前的所有save操作提交.请问这样在spring事物代理要怎么实现?

------解决方案--------------------
不用默认的,用手动的试试,更好的办法是直接控制service,不控制dao.
------解决方案--------------------
http://hi.baidu.com/sunyu830317/blog/item/74b3b1fe6f6fbf325c6008f0.html