1

每次用户单击删除按钮删除某些内容时,我都会调用

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,这使得异常在屏幕上显得非常难看。

我认为异常出现在事务提交时。

反正有抓吗?

4

2 回答 2

2

在 JPA 中,em.flush()可以使用方法来捕获异常。完成此操作后,如果您有问题,您将得到异常。

例如:

public void insert(Group group) {
    try {
        em.persist(group);
        em.flush();
    } catch (PersistenceException pe) {

    }
}
于 2012-12-03T10:56:19.217 回答
0

我会考虑使用 Seam 的 (2.x) 异常处理工具,让您处理未捕获的异常——例如打印错误消息和/或重定向到错误页面——而不是可能为此目的耦合与持久性相关的逻辑。即使您仍然想刷新持久性上下文,这仍然可以为您提供更多错误处理实现方法。请参阅Seam 文档中的异常处理。根据您的应用程序的需要,Seam ExceptionHandler 类可以扩展以进行进一步的定制。请参阅此相关答案

于 2012-12-10T00:29:29.940 回答