2016-08-25 7 views
2

コレクションは@Entityです。アイテムのコレクションでエンティティを取得するとします。次に、コレクションにエントリがあると仮定します。 私の質問は次のとおりです。Hibernate - コレクションの置き換え

Item(id:2, name: "puppy") 

をので:持っているコレクションで

Item(id: 1, name: "box"), Item(id:2, name: "plate) 

:あなたが持っているコレクションを置き換えるとどうなるか、削除孤児がtrueの場合は、id == 1とアイテムが消えますカスケードが有効になります。しかしid == 2のアイテムが置き換えられると、 "plate"ではなく "puppy"というラベルが付いたものに更新されますか?

@Transactionalを使用すると、春の起動時に何が起こりますか?

答えて

2

セッションでコレクションを取得した場合は、コレクションを新しいものに「置き換える」ことはできません。代わりに、既存のものを更新する必要があります。

このコレクションからエントリを削除する場合は、そのイテレータを取得し、そのエントリに対して「イテレータ」を呼び出します。エントリを更新したい場合は、それを取り出して更新してください。あなたが触れなかった前のエントリはそのままDBにとどまります。

あなたがコレクションを反復してそのエントリの一部を削除した場合、 "delete-orphans"が表示されます。したがって、親と子の関係はもはや存在せず、あなたは子供が独立して生き残ることを望んでいません。

これも役に立ちます - Hibernate deleting orphans when updating collection