Нарушение ограничения в однонаправленном отображении OneToMany в Hibernate с помощью JoinTable и OrderColumn при удалении элементов
У меня проблема при удалении элементов из списка, отображенного как описано выше. Вот карта:
@Entity @Table( name = "foo") class Foo { private List bars; @OneToMany @OrderColumn( name = "order_index" ) @JoinTable( name = "foo_bar_map", joinColumns = @JoinColumn( name = "foo_id" ), inverseJoinColumns = @JoinColumn( name = "bar_id" ) ) @Fetch( FetchMode.SUBSELECT ) public List getBars() { return bars; } }
Вставка экземпляров Bar и сохранение Foo работает нормально, но когда я удаляю элемент из списка и снова сохраняю, уникальное ограничение bar_id в таблице сопоставления нарушается. Следующие операторы SQL выдают hibernate, и они выглядят довольно странно:
LOG: execute : delete from foo_bar_map where foo_id=$1 and order_index=$2 DETAIL: parameters: $1 = '4', $2 = '6' LOG: execute S_5: update foo_bar_map set bar_id=$1 where foo_id=$2 and order_index=$3 DETAIL: parameters: $1 = '88', $2 = '4', $3 = '0' ERROR: duplicate key value violates unique constraint "foo_bar_map_bar_id_key"
Ошибка совершенно понятна, учитывая операторы, сгенерированные Hibernate (в списке пять элементов, я удаляю первый, а Hibernate удаляет строку сопоставления с индексом LAST и пытается обновить оставшиеся, начиная с первого) ,
Что не так с отображением выше?