保留新实体后,如何使用其父实体的信息填充实体中的字段

时间:2020-01-23 09:45:44

标签: java hibernate jpa

我有以下实体:

@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实体,父对象不会自动填充。

有什么办法可以做到这一点?

1 个答案:

答案 0 :(得分:1)

似乎this应该有所帮助。

如果您想在ChildParent实体之间提供正确的参考,并推迟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在评论中给出了相同的建议。