每次用户点击删除按钮删除内容时,我都会调用
em.remove(entity)
如果仍然存在对此实体的引用约束,我会看到抛出PersistenceException,我可以捕获它以注意用户。
但是,这只适用于我在代码中可以看到的关系。例如:
A has an OneToMany relationship to B
在一些特殊情况下,这种关系不会反映在代码中。例如:
Table A has a foreign key to Table B. But in code, there is no XtoX relationship between them
在这些情况下,我无法捕获上面提到的PersistenceException,这会使异常在屏幕上显得非常难看。
我认为在事务提交时出现异常。
无论如何都能抓住它吗?
答案 0 :(得分:2)
在JPA中,em.flush()
方法可用于捕获异常。完成此操作后,如果遇到问题,您将收到异常。
例如:
public void insert(Group group) {
try {
em.persist(group);
em.flush();
} catch (PersistenceException pe) {
}
}
答案 1 :(得分:0)
我会考虑使用Seam的(2.x)异常处理工具来处理未捕获的异常 - 例如打印错误消息和/或重定向到错误页面 - 而不是可能为此目的耦合与持久性相关的逻辑。即使您仍想要刷新持久性上下文,这仍然可以为您提供更多的错误处理实现方法。见exception handling in the Seam documentation。根据应用程序的需要,可以扩展Seam ExceptionHandler类以进行进一步的自定义。见this related answer。