1

Nabbleでこのリンクを見ました。誰か(James Sutherland)が誰かに「すべてのJPQLクエリを削除を実行しています。これは基本的に独自のSQLを実行するのと似ています。クエリを正しく実行して、制約を維持する責任があります。

これは、JPAでオブジェクトを削除する通常の方法ではありません。JPAでは、通常、オブジェクトを読み取り、それに対してremove()を呼び出します。」

これが本当かどうか疑問に思いました。単純なテーブル以上のものを削除することがどれほど困難であったかに基づいて、私はこれが正しいと思い始めます。

これまでの私の考えは、次のようにすることです。

  1. 選択ステートメントを実行しますが、特にそうかもしれません(たとえば
    、学生コースが4を超え、マークが60を
    超え、2011年から2012年の間に学生が登録されているすべての学生を選択します)。
  2. オブジェクトの表示/編集/削除(つまり、EntityManagerのマージ/永続化/削除)
  3. すすぎ、泡立てなど

これは、JPAを使用することを想定している方法へのアプローチとして合理的に聞こえますか、それとも私はベースから外れていますか?

4

1 に答える 1

1

削除のカスケードについては、ここで説明しました:Google AppEngine-DELETEJPQLクエリとカスケード。また、たとえば、楽観的ロックが使用されている場合、バッチ更新を実行してもバージョン列は更新されません。したがって、JPAではバッチ更新/削除が少し不自由になります。

しかし、これはJPAでオブジェクトを削除する通常の方法ではないとは言えません。条件に基づいて2、20、または200個のオブジェクトを削除する必要がある場合、remove()それぞれを呼び出すためだけに最初にオブジェクトを選択してフェッチすることは、ほとんどの場合悪い考えです。

結局のところ、バッチの更新/削除は、理由のために仕様に含まれています。

于 2012-04-16T20:47:24.567 に答える