即使处理了异常,Spring事务也不会提交,休眠将其标记为仅回滚

时间:2019-09-11 13:08:13

标签: spring hibernate transactions

我们在应用程序中使用的是Spring 5.1.6.RELEASE和Hibernate 5.2.18.Final版本

在下面的代码片段中,删除后的flush方法在内部将事务标记为rollbackOnly(TransactionImpl.setRollbackOnly())。这似乎正在发生,因为由于子记录的存在,删除导致异常。 该代码捕获了异常,因为要求在无法删除实体时对其进行一些更改。而且确实被抓住了。

问题是:休眠事务仍被标记为rollBackOnly。 因此,从方法返回时,当我的主要交易进行提交时,它给我错误:

java.lang.RuntimeException: org.hibernate.TransactionException: Transaction was marked for rollback only; cannot commit
org.springframework.orm.hibernate5.HibernateTemplate hibernateTemplate;
public void method1(ID id)
{
    doStuff();
    try
    {
        //Trying to delete entity record
        hibernateTemplate.delete(id);
        hibernateTemplate.flush();
    }
    catch(Exception e)
    {
        //Changing id entity to mark a flag
        id.changeFlag("Y");
        hibernateTemplate.saveOrUpdate(id);
    }
}

在Hibernate 3.X版本中,此代码段运行良好,但是由于该rollBackOnly标志,因此在Hibernate 5.2.18中不起作用。

有人可以帮助我解决这个问题吗?

0 个答案:

没有答案