Я хочу, чтобы все сгенерированные первичные ключи в моей базе данных были отрицательными целыми числами.
Я определил TableGenerator:
<table-generator name="MY_SEQ" table="MY_SEQUENCE_TABLE"
initial-value="-1000000" allocation-size="1" />
Я предполагал, что первый сгенерированный ключ будет начинаться с -1000000 иувеличивать каждый идентификатор на 1. Таким образом, следующий идентификатор будет -999999.
Когда я создаю и сохраняю новую сущность, я получаю следующую ошибку:
java.sql.SQLIntegrityConstraintViolationException: оператор былпрервано, потому что это вызвало бы дублирование значения ключа в ограничении уникального или первичного ключа ...
Когда я проверяю MY_SEQUENCE_TABLE, значение в SEQUENCE_NEXT_HIGH_VALUE равно 2. Я попытался определить генератор таблицы в ORM.xmlи в качестве аннотации, но поведение одинаково в обоих направлениях.
Можно ли использовать отрицательные значения для PK в Hibernate?
Спасибо
Обновление
Я делаю это, потому что я перемещаю данные из одной базы данных в другую.Затем я перемещаю данные обратно.За это время новые объекты могут быть созданы в другой базе данных (Derby).Когда я перемещаю объекты обратно, мне нужен способ узнать, были ли они созданы в этой базе данных, не меняя схему таблицы.Я подумал, что проверю идентификаторы на наличие отрицательных значений, и они, как я знаю, должны быть созданы как новые сущности при перемещении данных обратно.
Кто-нибудь знает, что класс Hibernate генерирует, обрабатывает TableGenerator и генерирует таблицукод последовательности?
Обновление 2
После некоторого тестирования кажется, что Hibernate игнорирует начальное значение и размер выделения при использовании генератора таблиц.
Я добавил это свойство в файл persistence.xml
<property name="hibernate.id.new_generator_mappings" value="true"/>
Я переключился на генератор последовательности, и начальное значение используется правильно, но размер выделения не сохраняется как отрицательный.Согласно спецификации Derby допустима отрицательная последовательность.
Из ссылки 10.6:
Если указано, значение INCREMENT является ненулевым числом, которое соответствует значению типа DataType.Если не указано, по умолчанию значение INCREMENT равно 1. INCREMENT - это шаг, на котором продвигается генератор последовательности.Если значение INCREMENT положительное, порядковые номера со временем увеличиваются.Если INCREMENT отрицателен, порядковые номера становятся меньше.
Выкл, чтобы попробовать больше вещей .....