我正在使用 Hibernate 持久性 API。我有两个实体,您可以检查它们的父实体:(子实体不包含对父实体的任何引用 - 因为它在逻辑上不是必要的业务。)
@Entity(...)
public class ParentEntity implements Serializable {
@Id
private Integer id;
// ...
@OneToMany(fetch = FetchType.LAZY)
@org.hibernate.annotations.Cascade({ org.hibernate.annotations.CascadeType.ALL }) // losing JPA's portability
@JoinColumn(name = "parent_id", referencedColumnName = "id")
private Set<ChildEntity> children;
// ...
}
当我保留一个新的父实体时,将执行一个数据库触发器。此触发器按默认值插入一些子项。但是坚持之后, children 不在集合中。 我该如何解决这个问题?这是我的 Dao 方法:
@Transactional(readOnly = false)
@Override
public Parent addParent(String name) {
Parent temp = new Parent(name);
entityManager.persist(temp);
return entityManager.find(Parent.class, temp.getId()); // return temp;
}
非常感谢您所做的一切。
最佳答案
Parent temp = new Parent(name);
entityManager.persist(temp);
如果我正确地找到你,
您正在创建一个新的父对象(没有任何子实体)并将其持久化。 因此,没有任何子对象的父对象会持久保存在数据库中。
当你做的时候
entityManager.find(Parent.class, temp.getId());
您不能指望拥有包含子实体的父类。
由于您是通过数据库触发器持久化子对象,因此必须有一些方法来放置 parent_id (tem.getId()/parent.getId())在他们中
没有其他方法可以找到持久父对象的子对象。
关于java - 坚持后如何填充完整的实体?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34249324/