我有以下实体:
@Entity()
public class Parent {
@Id
private Long id;
private String name;
...
}
@Entity()
public class Child {
@Id
private Long id;
private String name;
@Column(name = "parent_id")
private long parent_id;
@ManyToOne(targetEntity = Parent.class)
@JoinColumn(name = "parent_id", insertable = false, updatable = false)
private Parent parent;
...
}
Child
实体必须始终具有Parent
实体。
我希望Child
类将parent_id作为字段,并将其所有字段都来自其父项的Parent对象。
通过这种方式,我可以保存仅具有Child
标识的Parent
实体,并且理想情况下,在检索{{1}时将填充Child
内的父对象}。
我已经实现了,当从数据库中检索Child
时,父字段充满了Child
实体,但是如果我坚持只包含parent_id的新Parent
实体,父对象不会自动填充。
有什么办法可以做到这一点?
答案 0 :(得分:1)
似乎this应该有所帮助。
如果您想在Child
和Parent
实体之间提供正确的参考,并推迟Parent
实体的实际加载。您应该这样做:
Child newChild = new Child();
newChild.setParent(entityManager.getReference(Parent.class, parent_id));
// ...
entityManager.persist(newChild);
或者,如果您想让newChild
带有完全初始化的Parent
而不是entityManager.getReference
,则应该使用entityManager.find(Parent.class, parent_id)
。
P.S。 @JBNizet在评论中给出了相同的建议。