Дублирующая ошибка ввода в MySQL / Hibernate

0

Я столкнулся со следующей проблемой и не могу найти правильное решение. У меня есть отношение 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, сможет обрабатывать временную несогласованность и проверять ограничения на фиксацию. Есть ли что-то, что я пропускаю, или нет способа сделать это без серьезных обходных решений?

Приветствия

Теги:
hibernate
duplicates

1 ответ

1

Некоторым генераторам идентификаторов нужно перейти непосредственно к БД, чтобы получить идентификатор.

Например, с помощью генератора native с столбцом AUTOINCREMENT в MySQL при вызове save() он выполнит вставку и извлечет идентификатор, даже если вы не совершили сеанс.

Попробуйте перейти к управляемому Hibernate генератору.

  • 0
    ОК - есть недоразумение. Мое плохое: у отношения есть другой автоматически сгенерированный атрибут ID. Есть только это дополнительное ограничение уникальности для внешнего ключа / порядкового номера.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню