我们在应用程序中使用的是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中不起作用。
有人可以帮助我解决这个问题吗?