Сохранение сущности с помощью PagingAndSortingRepository.save создает оба события @ PostUpdate / @ PostCreate, если инициализирована дочерняя коллекция - PullRequest
0 голосов
/ 21 декабря 2018

Я использую 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

...