6

JPA2.0 の CriteriaQuery は、選択を行うためのタイプ セーフな方法を提供します。これは素晴らしいことです。しかし、なぜ更新/削除操作を提供しないのでしょうか? 一括更新/削除するには、エラーが発生しやすい SQL または JPQL テキストを記述する昔に戻る必要があります。IMO、更新/削除の CriteriaQuery は、原因の処理が select と同じであるため、難しくはないはずです。

これがJPAの次のバージョンで実装されることを願っています。

4

1 に答える 1

2

JPA は、SQL の代わりにプログラミング言語を使用してデータベース レコードを操作できるように、データベース レコードをオブジェクトにマップすることを動機とする ORM ツールであるため、SQL/HQL/JPQL を使用して更新を実行することは推奨されません。 .

エラーが発生しやすい SQL または JPQL を使用してオブジェクトを更新するのを防ぐために、使用してオブジェクトCriteriaQueryのリストを取得したら、結果オブジェクトをループしてから、オブジェクトのプロパティを 1 つずつ変更して、一括処理を行うことができます。更新または削除します。JPA は、これらのオブジェクトに加えられた変更を検出し、適切な SQL を生成して、EntityManager.flush()が呼び出されたときに対応するレコードをバッチで更新できる必要があります。

于 2012-04-02T06:45:09.183 に答える