Нарушение ограничения в однонаправленном отображении 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 и пытается обновить оставшиеся, начиная с первого) ,

Что не так с отображением выше?

Ответы на вопрос(4)

Ваш ответ на вопрос