Как заполнить поле в сущности информацией из родительской сущности после сохранения новой сущности - PullRequest
1 голос
/ 23 января 2020

У меня есть следующие сущности:

@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 как поле и родительский объект со всеми полями от его родителя.

Таким образом, я могу сохранить сущность Child, имеющую только идентификатор Parent и, в идеале, родительский объект внутри Child будет заполнен при извлечении Child из базы данных.

Я добился того, что при извлечении Child из базы данных родительское поле заполняется сущностью Parent, но если Я сохраняю новую Child сущность только с parent_id, родительский объект не заполняется автоматически.

Есть ли способ достичь этого?

1 Ответ

1 голос
/ 23 января 2020

Похоже, это должно помочь.

Если вы хотите предоставить правильную ссылку между 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).

PS Тот же совет дал @JBNizet в комментариях.

...