DataIntegrityViolationException

DataIntegrityViolationException

我想用唯一字段保存实体。除了检查约束是否未违反外,我只想以某种方式跳过DataIntegrityViolationException

我发现我可以通过以下方式做到这一点:

@Transactional
wrapperMethod() {
    methodWhenInsertIsDone();
}

@Transactional(propagation = Propagation.REQUIRES_NEW)
methodWhenInsertIsDone() {
    failingMethod();
}

failingMethod(){
    sessionFactory.getCurrentSession().blablabla()
}


当我运行它时,出现以下异常:

HibernateException: Could not obtain transaction-synchronized Session


所有这些方法都在服务层类中。 @EnableTransactionManagement存在,已定义HibernateTransactionManager。没有@Transactional,一切正常。

您能否在这里告诉我什么地方出了问题,或者/或者建议使用另一种在没有try / catch块的情况下吞下DataIntegrityViolationException异常的方法。

预先感谢您的每个想法!

更新:我正在将methodWhenInsertIsDone移到另一个类中,因为现在不是从代理对象中调用它。

更新:异常消失了,但Propagation.REQUIRES_NEW没有帮助。因此,现在我需要寻找其他解决方案吞咽DataIntegrityViolationException。如果有,请告诉我。我可以为此提出一个新问题。

最佳答案

我将methodWhenInsertIsDone移动到了另一个类中,因为它不是从代理对象中调用的。异常消失了。

但是Propagation.REQUIRES_NEW没有帮助。因此,现在我需要寻找吞咽DataIntegrityViolationException的其他解决方案。如果有,请告诉我。我可以为此提出一个新问题。

09-10 21:17