сохранение сопоставленной коллекции в новом объекте - PullRequest
1 голос
/ 10 мая 2011

Я прочитал документацию и подумал, что смогу сделать следующее ...

отобразить мои классы как таковые (что работает)

@Entity
public class ParentEntity
{
...
    @OneToMany(mappedBy = "parent")
    private List<ChildEntity> children;
...
}

@Entity
public class ChildEntity
{
...
    @Id
    @Column
    private Long id;
...
    @ManyToOne
    @NotFound(action = NotFoundAction.IGNORE)
    @JoinColumn(name = "parent_id")
    private ParentEntity parent;
...
}

.. но я хочу иметь возможность вставить в обе таблицы за один раз и подумал, что это будет работать:

parent = new ParentEntity();
parent.setChildren(new ArrayList<ChildEntity>());
ChildEntity child = new ChildEntity();
child.setParent(parent);
parent.getChildren().add(child);
session.persist(parent);

Может кто-нибудь сказать мне, что мне не хватает?

Нужно ли сначала сохранить родителя, затем добавить ребенка и сохранить его снова?

спасибо.

1 Ответ

2 голосов
/ 10 мая 2011

Вы должны добавить @OneToMany(cascade=CascadeType.PERSIST).Вы также можете иметь CascadeType.ALL, который включает в себя persist, merge, delete ...

Каскадирование - это параметр, который указывает hibernate, что делать с элементами коллекции, когда владелец объекта сохраняется, объединяется / удаляется.

По умолчанию он ничего не делает с ними.Если установлен соответствующий тип каскада, он вызывает ту же операцию для элементов коллекции, которые были вызваны для родителя.

...