【发布时间】:2010-11-15 10:35:13
【问题描述】:
这个问题我已经很久了,我已经在网上搜索过,所以进进出出,还没有找到解决办法。我希望你能帮助我。
我在两个实体之间存在父子关系,如下所示:
@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() 始终返回最新的孩子列表?
【问题讨论】:
标签: hibernate caching persistence parent-child one-to-many