私は長い間この問題を抱えています。私はウェブとSOを出し入れして検索しましたが、まだ解決策を見つけられませんでした。あなたがそれについて私を助けてくれることを願っています。
私は次のような2つのエンティティ間に親子関係を持っています:
@Entity
public class Parent {
// ...
@OneToMany(mappedBy = "parent", fetch = FetchType.LAZY, cascade = CascadeType.REMOVE)
private Set<Child> children = new HashSet<Child>();
// ...
}
@Entity
public class Child {
// ...
@ManyToOne(fetch = FetchType.LAZY)
private Parent parent;
// ...
}
新しい子を作成して親に割り当てると、親がすでにキャッシュにある場合、親は更新されません。
Parent parent = new Parent();
em.persist(parent);
// ...
Child child = new Child();
child.setParent(parent);
em.persist(child);
parent.getChildren().size(); // returns 0
@PreUpdateを使用して、子が永続化されたときに子を親に自動的に追加しようとしましたが、2つの異なるスレッドに2つのエンティティマネージャーがある場合(JBossのように)、呼び出すまで問題は引き続き存在しますem.refresh(parent)
したがって、問題は、問題をスムーズに排除し、parent.getChildren()
常に最新の子のリストを返すようにする方法はありますか?