application.xml代码
<bean id="transactionAttributeSource" class="org.springframework.transaction.interceptor.NameMatchTransactionAttributeSource">
<property name="properties">
<props>
<prop key="*">PROPAGATION_REQUIRED,-DaoAccessException</prop>
<prop key="get*">PROPAGATION_REQUIRED,ISOLATION_READ_UNCOMMITTED,readOnly</prop>
</props>
</property>
</bean>
DaoAccessException.java代码
public class DaoAccessException extends RuntimeException{
public DaoAccessException(Throwable rooCase){
super(rooCase);
}
public DaoAccessException(String msg){
super(msg);
}
public DaoAccessException(String msg,Throwable rooCase){
super(msg,rooCase);
}
}
UserDaoImpl.java代码
public class UserDaoImpl extends HibernateDaoSupport implements UserDao{
public void addUser(Object o)throws DaoAccessException{
try {
getHibernateTemplate().save(o);
throw new DaoAccessException("回滚");
} catch (Exception e) {
// TODO: handle exception
throw new DaoAccessException(e);
}
}
}
测试代码
@org.junit.Test
public void addUser() {
ApplicationContext context = new FileSystemXmlApplicationContext(
"D:\\MyEclipse 5.5.1 GA\\workspace\\SpringAndHibernate\\WebRoot\\WEB-INF\\applicationContext.xml");
UserDao userDao = (UserDao) context.getBean("userDao");
User user = new User();
user.setName("赵六");
try {
userDao.addUser(user);
} catch (DaoAccessException e) {
// TODO: handle exception
e.printStackTrace();
}
}
设想中的效果是当程序执行完毕后 这个添加用户的事务操作应该回滚 可实际上却写进了数据库 这是为什么?
问题补充
<bean id="userDao" class="com.squall.dao.impl.UserDaoImpl">
<property name="sessionFactory" ref="sessionFactory"></property>
</bean>
问题补充
<bean id="beanNameAutoProxyCreator" class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
<property name="beanNames">
<list>
<value>userDAO</value>
</list>
</property>
<property name="interceptorNames">
<value>transactionInterceptor</value>
</property>
</bean>
问题补充:
我在程序中已经做了手动的异常 也就是说其实异常已经抛出 但是程序还是将事务提交上去 我是spring初学者 不是很清楚spring如何进行自动的回滚机制 也就是说一旦发生异常了 如何让spring自动进行事务的回滚