1

エンティティが削除または管理されている場合、エンティティ (またはそのハッシュ) は現在の EntityManger の永続化コンテキストに格納されるため、JPA はその状態を認識します。しかし、JPA 実装は、指定されたエンティティーが新規または切り離されていることをどのように知ることができるでしょうか? @ID が null かどうかのチェックは、常に機能するとは限りません。JPAプロバイダー固有ですか?言い換えれば、javax.persistence.EntityExistsExceptionマージ中にスローする必要があることをJPAがどのように知っているのでしょうか?

4

1 に答える 1

2

Hibernate がそれを行う方法は次のとおりです。

  • 識別子が生成されている場合は、識別子の存在を使用します
  • そうでなく、エンティティが (楽観的ロックのために) バージョン管理されている場合は、タイムスタンプまたはバージョンを使用します
  • 上記が不可能な場合は、二次キャッシュまたはデータベースにクエリを実行して、識別子が既に存在するかどうかを確認してください。
于 2012-05-18T20:59:45.570 に答える