Hibernate вызывает боль при слиянии объекта, который содержит упорядоченную коллекцию, при удалении элемента из середины коллекции.
Некоторые предыстории: я работаю над инструментом, который создает отчеты CSV. В моей модели я хочу, чтобы у объекта отчета были объекты столбцов, порядок которых определяется значением столбца int.
Проблема возникает, когда я удаляю столбец, у которого orderIndex не последний в списке. При выполнении merge () Hibernate запускает следующий SQL:
update REPORT_COLUMNS set [...], orderIndex=1 where pkey=2 --This is formerly the 2nd column, and now it's orderIndex is going to collide with the orderIndex of the 1st
delete from REPORT_COLUMNS where pkey=1 --This is the 1st column, which is being removed
Если бы Hibernate запустил удаление первым, проблем не было бы.
Вот как объявляется коллекция:
@OneToMany(fetch = FetchType.EAGER)
@Fetch(value = FetchMode.SUBSELECT)
@OrderBy("orderIndex")
@JoinColumn(name = "report", updatable = true, insertable = true, nullable = false)
@Cascade({ org.hibernate.annotations.CascadeType.DELETE,
org.hibernate.annotations.CascadeType.DELETE_ORPHAN,
org.hibernate.annotations.CascadeType.MERGE,
org.hibernate.annotations.CascadeType.PERSIST,
org.hibernate.annotations.CascadeType.REMOVE,
org.hibernate.annotations.CascadeType.SAVE_UPDATE })
public List<ReportColumnImpl> getColumnImpls() {
return columns;
}
Ваша помощь будет принята с благодарностью.