JPA2.0 の CriteriaQuery は、選択を行うためのタイプ セーフな方法を提供します。これは素晴らしいことです。しかし、なぜ更新/削除操作を提供しないのでしょうか? 一括更新/削除するには、エラーが発生しやすい SQL または JPQL テキストを記述する昔に戻る必要があります。IMO、更新/削除の CriteriaQuery は、原因の処理が select と同じであるため、難しくはないはずです。
これがJPAの次のバージョンで実装されることを願っています。
JPA2.0 の CriteriaQuery は、選択を行うためのタイプ セーフな方法を提供します。これは素晴らしいことです。しかし、なぜ更新/削除操作を提供しないのでしょうか? 一括更新/削除するには、エラーが発生しやすい SQL または JPQL テキストを記述する昔に戻る必要があります。IMO、更新/削除の CriteriaQuery は、原因の処理が select と同じであるため、難しくはないはずです。
これがJPAの次のバージョンで実装されることを願っています。
JPA は、SQL の代わりにプログラミング言語を使用してデータベース レコードを操作できるように、データベース レコードをオブジェクトにマップすることを動機とする ORM ツールであるため、SQL/HQL/JPQL を使用して更新を実行することは推奨されません。 .
エラーが発生しやすい SQL または JPQL を使用してオブジェクトを更新するのを防ぐために、使用してオブジェクトCriteriaQuery
のリストを取得したら、結果オブジェクトをループしてから、オブジェクトのプロパティを 1 つずつ変更して、一括処理を行うことができます。更新または削除します。JPA は、これらのオブジェクトに加えられた変更を検出し、適切な SQL を生成して、EntityManager.flush()
が呼び出されたときに対応するレコードをバッチで更新できる必要があります。