У меня есть родительская и дочерняя сущности,
, и я передал CascadeType.PERSIT дочерним сущностям.
Когда я сохраняю Parent с детьми, это работает хорошо.
Но когда я действительно добавил child, hibernate начал вставлять строку.
@Entity
class Parent{
@Id
private Long id;
@OneToMany(mappedBy = "parent", cascade = CascadeType.PERSIST)
private List<Child> children = new ArrayList<>();
}
@Entity
class Child{
@Id
private Long id;
@ManyToOne..
}
public void testCascade(){
Parent parent = new Parent();
Child child1 = new Child();
Child child2 = new Child();
parent.addChild(child1);
parent.addChild(child2);
em.persist(parent);
// works well until here
Child child3 = new Child();
parent.addChild(child3);
}
Когда я добавляю child3
вparent
без em.persist
, они также insert
child3.
Зачем они это делают?
Я знал, что CascadeType.PERSIST
означает что-то вроде следующего.
em.persist(parent);
==
em.persist(parent);
em.persist(child1);
em.persist(child2);
также CascadeType.MERGE
означает
em.merge(parent);
==
em.merge(parent);
em.merge(child1);
em.merge(child2);
Я не ожидал изменений обнаружения.
Если я даю CascadeType.MERGE
, это работает хорошо, как я ожидал.
Можете ли вы объяснить эту ситуацию?