Hibernate не жалуется на уникальность базы данных, он жалуется, что текущий Session
уже содержит объект с тем же идентификатором, что и новый объект, который вы пытаетесь сохранить.Это не допустит - Hibernate имеет строгое требование, чтобы данный идентификатор не мог быть представлен двумя разными объектами в рамках одного сеанса.
В какой-то момент ваше приложение сохранило или загрузило объект с тем же идентификатором, и этот объект уже "зарегистрирован" в сеансе.В данном конкретном случае сложно сказать, на какой идентификатор он жалуется, поскольку текст исключения неясен.Попробуйте временно удалить каскадные директивы и посмотреть, если это все еще происходит, попробуйте сузить.
При необходимости вы можете заставить сеанс «забыть» о любых существующих объектах для данного идентификатора (используя Session.evict()
в API Hibernate или EntityManager.detach()
в API JPA 2.0), но это не такочень элегантное решение.
Повторюсь - это исключение не имеет ничего общего с ограничениями базы данных, оно касается защиты Hibernate от согласованности состояния внутренней памяти.