0

playフレームワークを使用してJPAでUPDATE sqlクエリを実行することは可能ですか?

今のところ、エンティティを更新するために私が行うことは次のとおりです。

  • find() メソッドまたは find() メソッドの選択クエリを介してエンティティを取得するには
  • 必要な値を変更する
  • オブジェクトで save() メソッドを呼び出す

しかし、SELECTとUPDATEの2つのクエリを作成すると思います。

1 つのクエリのみを使用してすべてを行う方法はありますか? UPDATEクエリのみですか?

ご協力ありがとうございました

4

1 に答える 1

2

API メソッドを使用している限り、2 つのクエリの問題を回避できるとは思いません。エンティティ マネージャーは、エンティティの更新を開始することはできません。最初にそれらを見つけ、その状態を確認してから、更新が本当に必要かどうか、つまり変更が行われたかどうかを判断する必要があります。

ただし、を使用して、常に独自のパラメーター化された更新ステートメントを記述することができますJPQL。ほとんどfind()の場合、エンティティの主キーと一致する ID または類似のものを使用します。
ID をステートメントに渡して、直接更新することができます。ただし、IDがユーザー入力からではなく、以前の選択からのものである場合にのみ、これを行います。つまり、既存のエンティティであり、本当に必要なものであることが保証されています。

クエリは次のようになります。

UPDATE MyTable SET MyValue = :newValue WHERE MyId = :id 

パラメータとして newValue と id を渡す場所。

ただし、エンティティ マネージャーにすべての作業を任せたいと思います。とにかく単一のステートメントでそれを行いたいのはなぜですか?大量の操作を行っていない限り、これらの短く具体的なステートメントは通常非常に高速であるため、速度は問題になりません。

于 2012-08-27T13:59:37.697 に答える