事务回滚的问题

a_lgz 2012-08-07 03:22:20
对于声明式事务,一般很难获取到容器事务的.即只有抛出异常后,事务才会回滚.
请问,有没有方法,不抛异常,手工让其回滚?
@Transaction
public ....(...)
{...
Transaction tr=dao.getHibernateSession().getSession(EntityMode.POJO).getTransaction();
boolean b=tr.isActive();//true
tr.rollback();
return "事务回滚!";
...}

执行这个方法后,报Transaction not activate.
...全文
466 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
AlexChowKey 2012-09-10
  • 打赏
  • 举报
回复
try{
}catch(e){
}
humanity 2012-09-05
  • 打赏
  • 举报
回复
这个是与 EJB 类似的 setRollbackOnly(); 不过毕竟是 Spring 提供的 API,并不是标准的 J2EE API。

TransactionAspectSupport.currentTransactionStatus( ).setRollbackOnly();
cjoy4856 2012-08-20
  • 打赏
  • 举报
回复
LZ可以通过AOP的方式来实现:
1.先配置相关方法,让这些方法都符合你的AOP的事物规则,但是以某方法开始的操作设置为只读,也就是无论你怎么操作数据库的数据都不会产生(除非人为去处理了)
2.在通过AOP的方法,使用切面方式,去拦截哪些方法,只要进入这些方法的话,你可以去添加一个操作,像你说的异常,但是这个我没有出设计过,类似的我设计,想操作发生异常,AOP拦截相关的操作异常,并将相关信息全部信息记录到指定的流中。
LZ可以试试,行的通不?
wang_shx 2012-08-17
  • 打赏
  • 举报
回复
先设置autocommit为false. 然后在你的代码逻辑中控制rollback. 当然在正常逻辑要记得手动commit
zx870811130 2012-08-16
  • 打赏
  • 举报
回复
tr.isActive()的用处是什么?可以作为判断条件不?
a_lgz 2012-08-16
  • 打赏
  • 举报
回复
就是不想用异常方法回滚啊.
Intboy 2012-08-16
  • 打赏
  • 举报
回复
1/0
humanity 2012-08-16
  • 打赏
  • 举报
回复
没 flush 不一定提交到数据库执行了,但如果你先 update 再去 select 同一个表,我想念 hibernate 一定知道很提交 update SQL 去数据库执行的。

commit 一定会先 flush SQL 去执行。
LengYueFengCai 2012-08-16
  • 打赏
  • 举报
回复
想强制回滚别commit()就行了,对数据进行操作只在commit是进行,commit后也不能回滚了,hibernate中的rollback()方法只是清除缓存而已,比如说你写了insert into yourtable values('',''),程序中这句话只是把要插入的数据暂放缓存,当执行commit()时才进行数据库插入操作,所以你在commit()之前执行rollback()只是把要插入数据库的缓存清空了,数据压根就没进去过数据库。
所以你想人为控制事务发生可以对commit()进行控制,比如
if(){tx.commit();
}else{}
  • 打赏
  • 举报
回复

对于声明式事务,一般很难获取到容器事务的.即只有抛出异常后,事务才会回滚.
请问,有没有方法,不抛异常,手工让其回滚?

if(tr.isActive()){
tr.rollback();
}
uncle_yang 2012-08-16
  • 打赏
  • 举报
回复
应该是这个意思吧?
try{
//doSomething

}catch(Exception e){
transaction.rollback();
}
咖啡加糖_ 2012-08-07
  • 打赏
  • 举报
回复
用编程式,精度更高点..
cxw3152 2012-08-07
  • 打赏
  • 举报
回复
try{
}catch(e){
}
一下。。发生异常再让回滚 。

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧