2012-01-31 6 views
1

固定されていないオブジェクトだけを保存するには、休止状態にする必要があります。このオブジェクトが既に永続化されている場合、hibernateは何もしないか、永続化されたオブジェクトのidを返す必要があります。ソースのequals()とhashCode()メソッドはowerridenであり、正常に動作しています。 設定やプレ・インサート・リスナーのような方法で何とかできますか?たとえば :Hibernate。固定されていないオブジェクトのみを保存する

両方の要素が異なるIDので保持されます私の場合は
session.beginTransaction(); 
ElementToPersist element = new ElementToPersist(); 
element.setName("Element"); 
element.setValue("Value"); 

session.save(element); 
session.getTransaction().commit(); 

session.beginTransaction(); 
ElementToPersist element2 = new ElementToPersist(); 
element2.setName("Element"); 
element2.setValue("Value"); 

session.save(element2); 
session.getTransaction().commit(); 

。挿入する前に、この要素の存在をチェックするために、どのようにして休止状態にすることができますか?あなたは最高のプラチスを見せてくれますか? ありがとうございます。

答えて

4

クエリを使用して要素がデータベースに存在するかどうかを確認し、要素が存在しない場合にのみ挿入します。 2つのトランザクションが同じ要素を同時にチェックして挿入すると、競合条件が発生する可能性があるため、これはデータベース制約によって強制される必要があることに注意してください。

+0

異常なアーキテクチャのために残念ながら私は能力を持っていません。別のオブジェクトがこの要素と多対1の関連付けを持ち、それを永続化する必要がある場合、私は何ができますか? –

+0

さて、データベースに既に存在する要素、または場合によっては永続化した要素でManyToOneの関連付けを初期化します。 –

+0

だから、私は "Session.createQuery(" o =? ")というElementTOPersistのようなクエリを実行し、このオブジェクトを手動で保存しなければならないということを意味しましたか? –

関連する問題