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ドキュメントの例外処理を参照してください。アプリケーションのニーズに応じて、SeamExceptionHandlerクラスを拡張してさらにカスタマイズすることができます。この関連する回答を参照してください。

于 2012-12-10T00:29:29.940 に答える