技術:春、Hibernateは、JSR-303、jQueryの
プラットフォーム:WindowsのJPA:分離されたオブジェクトを効率的にマージする方法は何ですか?
私は、単純な更新ユースケースを実装しようとしています。を参照してくださいDAO/Service/Controller Source Code Link
Class2 Class1を含む多くのプロパティが含まれています。 Class2ControllerはSpringを使用して新しいClass2オブジェクトを作成し、HttpRequestオブジェクトパラメータをClass2にバインドします。その後、Serviceを呼び出し、DAOを呼び出します。 DAOでは、この新しいClass2オブジェクトをデータベースに更新する最も効率的な方法は何ですか?
オプション1:DAOで現在
、私はデータベースからクラス2オブジェクトを取得します。
Class2 class2Persisted = em.find(Class2.class, class2Request.getId());
更新、検索要求オブジェクトからプロパティを持つオブジェクトおよび上記
tx.begin(); class2Persisted.setClass1(class2Request.getClass1()); em.merge(class2Request); tx.commit();
コミットは、私だけsetClass1を使用してプロパティを1つ更新しています。しかしClass2には、更新が必要な多くのプロパティがあります。 Class2Persistedとclass2Requestをそれぞれのプロパティレベルではなく、オブジェクトレベルでマージする他の効率的な方法はありますか?
オプション2
Class2Controllerは、パラメータをバインドするclass2Persistedオブジェクトと要求春を取得してみましょう。
私は、オプション2は実行可能なオプションではないことを認識しました。私が以前に遭遇した別の問題linkを見てください。 Hibernateは関連するオブジェクトを読み込もうとしますが、私のカスタム制約なしで
EntityNotFoundException
をスローします@IdMustExist
は検証の機会を得ています。
他にも提案がありましたらお勧めします。
がでclass2Persistedとclass2Request同じ基本行(複数可)です(dynamicUpdate =真)org.hibernate.annotations.Entity @注釈ドリブンPOJO を経由して使用することができますDB? (例えば、彼らは同じユニークなIDを持っていますか?) – rhinds
一般的に、マージは使用しないでください。 "extended persistence context" – Phil