Почему Hibernate обнаруживает дочерние объекты? - PullRequest
0 голосов
/ 21 декабря 2018

У меня есть родительская и дочерняя сущности,
, и я передал 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, это работает хорошо, как я ожидал.

Можете ли вы объяснить эту ситуацию?

...