yar*_*Tir 12 java spring hibernate transactions
美好的一天.以下代码:
class A{
private B b;
@Transactional
public SomeResult doSomething(){
SomeResult res = null;
try {
// do something
} catch (Exception e) {
res = b.saveResult();
}
return res ;
}
}
@Transactional(propagation = Propagation.REQUIRES_NEW)
class B{
public SomeResult saveResult(){
// save in db
}
}
Run Code Online (Sandbox Code Playgroud)
据我了解,如果方法中存在异常,doSomething
则不会回滚事务.以及如何使其滚动?并返回了SomeResult
Cai*_*nha 18
您不应该以编程方式调用Rollback.根据文档的建议,最好的方法是使用声明性方法.为此,您需要注释哪些异常将触发回滚.
在你的情况下,这样的事情
@Transactional(rollbackFor={MyException.class, AnotherException.class})
public SomeResult doSomething(){
...
}
Run Code Online (Sandbox Code Playgroud)
查看@Transaction API和有关回滚事务的文档.
如果,尽管有文档建议,您想要进行编程回滚,那么您需要TransactionAspectSupport
按照已经建议的方式调用它.这是来自文档:
public void resolvePosition() {
try {
// some business logic...
} catch (NoProductInStockException ex) {
// trigger rollback programmatically
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
}
}
Run Code Online (Sandbox Code Playgroud)
但是可能存在架构错误.如果你的方法失败并且你需要抛出异常,你不应该期望它返回任何东西.也许你对这个方法承担了太多的责任,应该创建一个只对模型数据进行建模的分离,并在出现问题时抛出异常,回滚事务.无论如何,阅读文档.
归档时间: |
|
查看次数: |
15681 次 |
最近记录: |