我想用唯一字段保存实体。除了检查约束是否未违反外,我只想以某种方式跳过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
的其他解决方案。如果有,请告诉我。我可以为此提出一个新问题。