Я использую Spring Data Rest в своем приложении и обнаружил противоречивое поведение.
У меня есть родительский объект типа
public class Parent {
@OneToMany(mappedBy = "parent", targetEntity = Child.class, cascade = CascadeType.ALL, orphanRemoval = true)
private List<Child> children;
}
и дочерний элемент с родительской ссылкой
@ManyToOne
@JoinColumn(name = "PARENT_ID", referencedColumnName = "ID")
Parent parent
Когда я делаю parentRepository.save (Parent.builder (). Build ()), я получаю https://hibernate.atlassian.net/browse/HHH-9940
Но когда я делаю
parentRepository.save(Parent.builder.children(Collections.emptyList()).build())
, тогда я получаю и
@PostPersist
public void onCreate(Object entity) {
...
}
, и
@PostUpdate
public void onUpdate(Object entity) {
...
}
событие, которое нарушает логику моего домена.
Я пойман в ловушку для разрешения этого ... Я делаю что-то не так?Почему при сохранении родительского объекта с пустым списком дочерних элементов отправляется событие создания и обновления родительского объекта?
EDIT : я получаю один и тот же объект (родительский) в обоих слушателях.Единственный запрос, появившийся в журналах, это INSERT, никаких следов обновления.Это как вставка в БД, которая вызвала дополнительный фантом PostUpdate