2

私はjpaでeclipselinkを使用していますが、コミットすると情報が不足してエラーが発生することがあります。エラーの原因をすばやく見つけるのに役立つ追加の有益なエラーを取得する方法がありますか?

entityManager.getTransaction().commit();
4

1 に答える 1

1

これは、コミット自体が失敗する典型的なケースです。最も一般的なのは、データベースに制約がある場合で、JPA レイヤーでは認識されていません。たとえば、データベース テーブルの列に、JPA で定義されていない一意の制約がある場合があります。この場合、コミットはエラーをスローします。したがって、私の提案は、データベースの制約違反の可能性をチェックすることです。さらにjavax.transaction.RollbackException、トランザクションの周囲をキャッチする必要があります。

try {
  entityManager.getTransaction().begin();
  ...
  entityManager.getTransaction().commit();
} catch (RollbackException e1) {
  System.out.println(e1.getMessage());
  System.out.println(e1.getCause());
  throw ...;
}

にはe1.getCause()、違反した制約が含まれている必要があります。少なくとも、文明化されたデータベースと JDBC ドライバーを使用する場合:)。

于 2013-04-08T19:43:54.683 に答える