我有Spring
>
如果失败,应该回滚它自己的事务
service1.cteatsmth();
/*started in new transaction*/
public void cteateSmth()
{
//...some other inserts
// should not fail main transaction,
// but shoud rollback it's own if is failed
anotherService.cretePartA();
//should save state in db in any case
recordSmthCreation();
}
public void cretePartA(){
updateSubpartA();
updateSubPartA1();
if(!sucees) throw new ValidationException();
}
在上面的例子中,即使尝试对cretePartA()进行捕获包装,整个cteateSmth()事务也将回滚。
我尝试使用REQUIRES_NEW来实现这一点,但在这种情况下似乎无法回滚cretePartA()操作。
TransactionDefinition transactionDefinition = new DefaultTransactionAttribute(TransactionDefinition.Propagation.REQUIRES_NEW);
new TransactionTemplate(transactionManager, transactionDefinition).execute(new TransactionCallback()
{
@Override
public Object doInTransaction(TransactionStatus status)
{
try{
cretePartA()
} catch (Exception e){
}
return null;
}
});
我试图不为cretePartA()创建新的事务,只是超越了spring aop的服务调用。但在这种情况下,将为cretePartA()发送结果。
我通过对cretePartA()方法和try/catch块的注释@Transactional(propagation=propagation.REQUIRES_NEW)
解决了这个问题
-ZJ 以下是我在Application.Properties中的数据源设置:
我列出了一个问题“Spring事务失败回滚”。我有一个服务类,它调用2 DAO将数据插入到数据库表中。 我的事务配置: 我的服务和dao定义如下:
我们有一个Spring事务回滚问题,其中回滚似乎不起作用 在用注释的服务层方法中,我调用三个不同的类来插入3条记录 中间插入从第四个表执行get以填充描述字段,但此get失败。我希望第一次插入会回滚,但它似乎没有发生 几点: 获取方法抛出运行时异常 我们使用和中定义的。Bean是在中创建的,它被导入到 在层 中没有 注释 我们已经使用了
你能告诉我如何只对某些代码块运行事务吗?我有@Transactional的服务函数,并从它们调用存储库函数,在那里执行查询。但当查询失败时,由于事务必须结束,服务功能也随之失效。那么,当存储库函数失败时,如何返回null值呢?我需要在失败时捕获空值,并继续一些逻辑。我的代码: 我尝试了@davidxxx的答案,得到了这个错误:
这很好,但并不总是在代码中抛出运行时异常。因此,我挖掘并发现如下所示的rollbackFor; 现在,我必须更改所有代码,以使用RollBackfor更改@Transactional。但是还有其他方法可以将所有@transaction advice属性更改为rollbackFor=exception.class吗?
Spring 4.1.4 Hibernate 4.2.0 JDK 1.8 我的上下文:我有一个控制器调用-->Service-->调用Dao业务功能是删除(在1到许多DB关系中)一些子级,但不是所有子级。然后,在删除了一些子项之后,我尝试删除父项,然后我得到了java.sql.SqlIntegrityConstraintViolationException