У меня есть приложение, которое загружает объекты через спящий режим, а затем передает эти объекты на другой уровень как отдельные объекты. Любые изменения этих объектов отправляются обратно на уровень гибернации, где я вызываю saveOrUpdate()
на эти объекты.Будет ли метод Hibernate saveOrUpdate удалять детей?
Будет ли спящий режим удалять дочерние объекты отношения «один ко многим», содержащиеся в коллекции, в объектах, которые передаются в saveOrUpdate()
, если я просто удалю дочерний объект из коллекции до вызова saveOrUpdate()
?
Если нет, то как это обычно выполняется в приложении спящего режима, которое использует отдельные объекты?
Это имеет смысл. Однако, когда я устанавливаю CascadeType.ALL, orphanRemoval = true в коллекции, дочерний объект все еще не удаляется. Может ли это быть связано с тем, что я использую аннотацию JoinColumn в сочетании с аннотацией OneToMany? – Tom
@Tom: Вероятно, нет, нет, '@ JoinColumn' просто используется для переопределения имени столбца объединения по умолчанию. Кажется, что Hibernate не думает, что это сирота. Вы уверены, что какой-либо другой объект не имеет ссылки на этого ребенка? – skaffman
Это определенно не относится к другому объекту. Однако базовое отношение db фактически является ManyToMany, и я использую OneToMany с JoinColumn, чтобы упростить модель. Может быть, это его бросает? В противном случае я также заметил, что некоторые дочерние сущности ребенка содержат отношения ManyToOne, которые не могут иметь установленный на них атрибут orphanRemoval. Возможно, это мешает исключить родителя. – Tom