ApplicationContext.xml:<!-- 事务管理器配置,单数据源事务 -->
<bean id="transactionManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
</bean> <!-- 使用annotation定义事务 -->
<tx:annotation-driven transaction-manager="transactionManager"
proxy-target-class="true" />
Service层:@Transactional(rollbackFor = Exception.class)
public void saveActivity(Activity activity) throws Exception {
tripsDao.updateTrips(28);
if (1 == 1)
throw new Exception("xxxxxxx");}
问题:
updateTrips这个方法是HQL语句,没有回滚事务getSession().createQuery("update Trips ts set ts.tstate = '1' where ts.tripsid = ? and ts.ttype = 1")
.setParameter(0, 28).executeUpdate();
updateTrips这个方法是直接修改对象,回滚了事务
[code=Java]
getSession().saveOrUpdate(trips);[code]
各位大大帮帮忙解释下为什么呢?
<bean id="transactionManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
</bean> <!-- 使用annotation定义事务 -->
<tx:annotation-driven transaction-manager="transactionManager"
proxy-target-class="true" />
Service层:@Transactional(rollbackFor = Exception.class)
public void saveActivity(Activity activity) throws Exception {
tripsDao.updateTrips(28);
if (1 == 1)
throw new Exception("xxxxxxx");}
问题:
updateTrips这个方法是HQL语句,没有回滚事务getSession().createQuery("update Trips ts set ts.tstate = '1' where ts.tripsid = ? and ts.ttype = 1")
.setParameter(0, 28).executeUpdate();
updateTrips这个方法是直接修改对象,回滚了事务
[code=Java]
getSession().saveOrUpdate(trips);[code]
各位大大帮帮忙解释下为什么呢?
解决方案 »
- google channel api
- 请教高手STRUTS跟JSP的问题
- activemq的信息无法消费的问题
- 解析网页文本,并输出到txt文件中
- 快烦死了,hibernate No Dialect mapping for JDBC type: -1 错误
- 第一次使用Hibernate,果真还是有错误,来个人帮我看看问题所在
- JB里将用户名与密发到oracleO数据库里查询看是否正确的语句要怎么写啊
- 用jsp 如何访问oracle数据库
- 北京java项目外包承接工作室成立,可业余做项目,将统一安排。
- 使用jb5和wl6开发ejb程序,出现严重错误?
- 项目发布了,无法识别struts标签
- Jboss-----Error installing to Parse
你的dao底层要抛出给Service啊!
然后你Spring监控Serivce里面的方法、!
如果出错了它就给你回滚事务~~~!!!
如果你dao底层没有将异常抛出、Service捕获不到、也就是没有异常!
没有异常就不会给你回滚了!
也不知道说的对不对!
将就看吧!
}异常就回滚了- -!!
2 没看到你写aop的 active (应该是这么写吧),
不知道怎么在问题后面补充问题 -。-针对#1楼:
问题嘛:简单来说就是Service层里的一个方法,调用Dao方法,Dao方法里是HQL实现的操作,在Service层里我手动声明异常,然后手动抛异常。无法回滚事务,如果Dao里直接操作对象就可以回滚,请问怎么解决。在这里补充两点:
1、Dao层方法是没异常的,继承org.springside.modules.orm.hibernate.HibernateDao;
2、就用annotation管理事务,不用其他的那种关键字的事务
针对#2楼:
就用annotation管理事务,不用其他的那种关键字的事务针对#3楼:
诚如您说的,那怎么实现不让Aop提交呢,回滚呢。能讲的详细点吗?谢谢了针对#4楼:
呵呵,谢谢针对#5楼:
呵呵,不过Dao层方法没异常,
@Transactional(rollbackFor = Exception.class)
我就在Service层里进行声明异常,然后手动抛出一个异常。针对#6楼:
刚开始就是用try...catch的,不行,然后就声明异常再抛出异常,都无法让Hql的操作回滚