我正在使用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;
// ...
}
当我持久保存新的Parent实体时,会执行DB触发器。此触发器按默认值插入一些子项。但经过坚持,孩子们不在收藏中。 我该如何解决这个问题?这是我的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;
}
非常感谢你们所做的一切。
答案 0 :(得分:0)
Parent temp = new Parent(name);
entityManager.persist(temp);
如果我能帮到你,
您正在创建一个新的父对象(没有任何子实体)并将其持久化。 因此,没有任何子项的父对象将保留在DB中。
当你这样做时
entityManager.find(Parent.class, temp.getId());
您不能期望拥有包含子实体的父类。
由于您通过db触发器持久保存子对象,因此必须有一些方法来放置parent_id( tem.getId() / parent.getId())在他们中
没有其他方法可以找到持久父级的子对象。