Спящий режим с использованием генератора последовательности и последовательности в Oracle - PullRequest
2 голосов
/ 30 ноября 2011

У меня есть следующая последовательность:

[как видно сейчас в жабе]:

CREATE SEQUENCE LOG_ID_SEQ
  START WITH 787585
  MAXVALUE 1000000000000000000000000000
  MINVALUE 1
  NOCYCLE
  NOCACHE
  NOORDER
/

У меня есть следующий генератор последовательности таблиц:

@SequenceGenerator(name="LOG_ID_SEQ", sequenceName="LOG_ID_SEQ")
@Id
@Column(name = "log_id", nullable = false)
@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="LOG_ID_SEQ")
Long id;

наибольшее значение log_id в настоящее время составляет 39379151

Теперь странная проблема: клиент создал дамп базы данных poduction и импортировал его в тестовую базу данных.Когда я тестировал приложение, я получил уникальную ошибку ограничения ORA-00001 для этой таблицы.

Когда я импортировал тот же дамп и протестировал приложение на своей машине, я не получил эту ошибку ??

Как это возможно с Hibernate?Я понятия не имею, где или что искать.

[ОБНОВЛЕНО]: Если быть точным: после локального импорта дампа в новую схему последним значением последовательности в дампе было 39354002. Без сброса последовательности мойследующее значение 39379151.

Ответы [ 2 ]

0 голосов
/ 30 ноября 2011

Если текущее наибольшее значение log_id равно 39379151, но вы воссоздаете LOG_ID_SEQ в новой схеме / базе данных со начальным значением 787585, то следующая новая вставленная строка будет иметь log_id значение, которое уже существует.Вам, вероятно, следует изменить свой оператор CREATE SEQUENCE, чтобы он отражал обновленное новое максимальное значение для log_id.

0 голосов
/ 30 ноября 2011

Вы получаете значения из вашей последовательности, которые сталкиваются с данными в вашей таблице.

max (log_id) = 39 379 151, что выше значения "start with" вашей последовательности = 787 585.

Повторно создайте свою последовательность с «началом с» выше, чем max (log_id), и вы должны быть полностью установлены.

Ошибка может быть непоследовательной, поскольку вы можете использовать не все значения последовательности, поэтомувозможно, что в некоторых случаях вставки могут быть успешными, если вы получите значение, которое находится в промежутке между существующими строками.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...