API メソッドを使用している限り、2 つのクエリの問題を回避できるとは思いません。エンティティ マネージャーは、エンティティの更新を開始することはできません。最初にそれらを見つけ、その状態を確認してから、更新が本当に必要かどうか、つまり変更が行われたかどうかを判断する必要があります。
ただし、を使用して、常に独自のパラメーター化された更新ステートメントを記述することができますJPQL
。ほとんどfind()
の場合、エンティティの主キーと一致する ID または類似のものを使用します。
ID をステートメントに渡して、直接更新することができます。ただし、IDがユーザー入力からではなく、以前の選択からのものである場合にのみ、これを行います。つまり、既存のエンティティであり、本当に必要なものであることが保証されています。
クエリは次のようになります。
UPDATE MyTable SET MyValue = :newValue WHERE MyId = :id
パラメータとして newValue と id を渡す場所。
ただし、エンティティ マネージャーにすべての作業を任せたいと思います。とにかく単一のステートメントでそれを行いたいのはなぜですか?大量の操作を行っていない限り、これらの短く具体的なステートメントは通常非常に高速であるため、速度は問題になりません。