我有这个问题已经有很长一段时间了,我已经在网上搜索了SO而且还没有找到解决方案.我希望你能帮助我.
我在两个实体之间有一个父子关系,如下所示:
@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;
// ...
}
Run Code Online (Sandbox Code Playgroud)
问题在于,当我创建一个新子节点并将其分配给父节点时,父节点在缓存中时不会更新.
Parent parent = new Parent();
em.persist(parent);
// ...
Child child = new Child();
child.setParent(parent);
em.persist(child);
parent.getChildren().size(); // returns 0
Run Code Online (Sandbox Code Playgroud)
当孩子被持久化时,我曾尝试使用@PreUpdate自动将子项添加到父项,但是当我们在2个不同的线程中有2个实体管理器时(比如JBoss),问题仍然存在,直到我们调用 em.refresh(parent)
所以问题是 - 有没有办法顺利消除问题并确保parent.getChildren()始终返回最新的儿童名单?
有人可以帮助我理解如何定义一个与自身有关系的JPA映射实体?
例如,我的实体是CompanyDivision,divisionA包含divisionB,divisionC和divisionB包含divisionB1,divisionB2
谢谢!
caching ×1
entity ×1
hibernate ×1
jpa ×1
map ×1
one-to-many ×1
parent-child ×1
parentid ×1
persistence ×1
relation ×1