JPAを使用して既存のレコードを更新しようとしています。次のリンクは、レコードを更新する唯一の方法は、レコードの更新クエリを作成することであることを示唆しているよう です。ここにリンクの説明を入力してください
どちらでも構いません。しかし、繰り返しになりますが、なぜこれをストアドプロシージャから引き出して、オープンJPAの魔法をすべて使用するのでしょうか。JPAオブジェクトのインスタンスがある場合、これと同様の呼び出しを使用してデータベースに永続化しようとすると、
emf.persist(launchRet)
JPAフレームワークは、レコードがすでに存在するかどうかを確認し、存在する場合は、そのレコードに変更を加えます。存在しない場合は、新しいレコードを追加するだけです。本当にかっこいいです。代わりに、更新クエリでそのロジックをすべて自分で作成する必要があります。これは問題ありませんが、ストアドプロシージャを使用して、必要なすべての値を渡すことができないのはなぜですか?
更新:私の最後のコメントがすべてについて説明しているコード
try{
launchRet = emf.find(QuickLaunch.class, launch.getQuickLaunchId());
if(launchRet==null){
emf.getTransaction().begin();
emf.persist(launchRet);
emf.getTransaction().commit();
}
else{
emf.refresh(launchRet);
}
}
変数launchがメソッドに渡されます...
public QuickLaunch UpdateQuickLaunchComponent(QuickLaunch launch)
見つかった起動launchRetを渡された起動と等しく設定するだけで簡単ですか?