0

オブジェクトのリストがあります

@ManyToMany(Fetch=FetchType.Lazy)
@JoinTable(...inverseJoin....)
public list<objects> getList()

dto.mergeを実行するときに初期化したくない場合があります。

delete_orphanを指定しなかった場合でも、Hibernateはすべての関係を自動的に削除します。

冬眠が孤児、別名関係を削除するのを防ぐ方法を教えてもらえますか?

現在、マージを実行する前に、DBからリストを取得/設定する必要があります。

4

1 に答える 1

4

エンティティは関連付けの所有者であるため、リストはエンティティ状態の一部です。

そのため、Bean に何も含まれていない切り離されたエンティティをマージすると、Hibernate に通知されます。これはエンティティの新しい状態であり、オブジェクトはもう含まれていません。したがって、明らかに、Hibernate はエンティティと以前にリストに含まれていたオブジェクトとの間の関連付けを削除します。

私の推測ではmerge()、セッションからエンティティを取得して変更し、このインスタンスを merge() に渡すのではなく、新しいエンティティ インスタンスを作成して に渡します。

代わりに:

SomeEntity e = new SomeEntity();
e.setId(34L);
e.setFoo("newFoo");
e = session.merge(e);

あなたがやるべきです:

SomeEntity e = session.get(SomeEntity.class, 34L);
e.setFoo("newFoo");
// if the entity is detached:
e = session.merge(e);

あなたの問題は、孤児の削除とは何の関係もないことに注意してください。孤立した手段を削除します。親と子の間の関連付けを削除すると、子エンティティ自体が自動的に削除されます。

于 2012-06-19T09:44:49.920 に答える