Я столкнулся со следующей проблемой и не могу найти правильное решение. У меня есть отношение A с атрибутами id, x (внешний ключ), y (порядковый номер) и z (содержимое). Далее есть ограничение единственности на x-y. То есть обычно у меня есть такие кортежи, как (455, 159, 1, ...), (456, 159, 2, ...), (457, 159, 3, ...) и т. Д. Я использую Hibernate и это таблица сопоставления для определенного класса. Теперь у меня есть вариант использования, где я хочу вставить новый объект или удалить уже существующий и обновить порядковые номера других объектов. Например, если я вставляю новый объект сразу после 1, он должен получить порядковый номер 2, а затем объект, который ранее был 2, должен стать 3, 3 должен стать 4 и т. Д. Нечто подобное должно произойти при удалении объекта 2 - старого 3 должно стать 2 и т. д.
Однако я получаю исключение ConstraintViolationException при запуске обновления.
SEVERE: Could not synchronize database state with session
org.hibernate.exception.ConstraintViolationException: Could not execute JDBC batch update
...
Caused by: java.sql.BatchUpdateException: Duplicate entry '159-2' for key 2
Я не могу объяснить, почему это происходит. Фиксация коммитов / сессий отсутствует, поэтому я, хотя Hibernate / MySQL, смогу обработать временную несогласованность и проверим ограничения на коммит. Есть ли что-то, чего я пропускаю, или нет никакого способа сделать это без серьезных обходных путей?
Приветствия