Jay*_*Pea 7 service spring hibernate transactional rollback
我有一个@Service类,它有一个@Transactional方法,可以在同一个类上调用另一个@Transactional方法.我正在为此测试回滚行为,我发现它无法正常工作.代码看起来像这样:
@Service
public class DefaulService implements ervice
{
@Transactional
public void methodOne()
{
methodTwo();
//question edited
//this seems to be the problem
this.serviceDAO.executeUpdateOperation();
//test rollback
throw new RuntimeException();
}
@Transactional
public void methodTwo()
{
//DAO stuff
}
}
Run Code Online (Sandbox Code Playgroud)
运行methodOne之后,我检查数据库并且存在更改,即使日志显示"JDBCTransaction - rollback".
如果我单独调用methodTwo并在其末尾添加异常,则会正确回滚更改.
有没有办法让methodOne正确回滚在嵌套的@Transactional调用期间发生的更改?我的印象是REQUIRED的默认传播会实现这一点,但它似乎没有起作用.谢谢
UPDATE
好的,我刚注意到别的东西.在异常抛出之前,我正在调用服务的dao并通过'executeUpdate'执行手动更新.如果我对此行进行注释,则嵌套回滚会起作用.所以似乎问题实际上是调用DAO并运行executeUpdate查询.但是,这不应该在当前交易中运行吗?
当你调用这些方法时,你肯定是从bean工厂获取“服务”的实例,对吗?bean 工厂需要设置一个代理来实现每个方法调用的事务逻辑。我的印象是,这只在“外部人员”通过代理调用方法时才有效,而当一个方法调用另一个方法时不一定有效,因为该方法是实现对象内部的直接调用,并且不通过 AOP 代理。
归档时间: |
|
查看次数: |
3965 次 |
最近记录: |