我想保存具有唯一字段的实体。我不想检查是否违反约束,而是想以某种方式跳过 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
一切正常。
您能否告诉我这里出了什么问题或者/或者建议另一种方法来吞下 DataIntegrityViolationException
异常而不使用 try/catch block 。
提前感谢您的每一个想法!
更新:我正在将 methodWhenInsertIsDone
移动到另一个类中,因为现在它不是从代理对象调用的。
更新:异常已消失,但 Propagation.REQUIRES_NEW
没有帮助。所以现在我需要寻找其他解决方案吞下DataIntegrityViolationException
。如果您有的话请告诉我。我可以为其创建一个新问题。
最佳答案
我已将 methodWhenInsertIsDone 移到另一个类中,因为它不是从代理对象调用的。异常消失了。
但是Propagation.REQUIRES_NEW
没有帮助。所以现在我需要寻找其他解决方案来吞下DataIntegrityViolationException
。如果您有的话请告诉我。我可以为其创建一个新问题。
关于java - Hibernate 在 sessionFactory.getCurrentSession() 上失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42786352/