Обновление спящих последовательностей для генерации уникальных идентификаторов - PullRequest
0 голосов
/ 01 июня 2018

У меня есть таблица, в которой генерируется идентификатор (который является первичным ключом), как показано ниже:

@Id
@TableGenerator(name="idGen")
@GeneratedValue(strategy = GenerationType.TABLE, generator = "idGen")
private Long id = -1L;

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

Как я могу исправить эту проблему?

1 Ответ

0 голосов
/ 01 июня 2018

Когда вы используете GenerationType.TABLE, текущий идентификатор сохраняется в таблице.Имя таблицы, вероятно, где-то настроено, с idGen в качестве идентификатора.Возможно, вам придется обновить эту таблицу, чтобы отразить идентификаторы, назначенные вами вручную.Возможно, вам также придется перезапустить ваше приложение, так как оно могло кэшировать следующие несколько идентификаторов, которые будут назначены.

При этом использование GenerationType.TABLE не рекомендуется.Он использует пессимистичные блокировки и может замедлить работу вашего приложения.

Вместо этого вам следует использовать GenerationType.SEQUENCE, если ваша база данных поддерживает это.Если вы хотите что-то простое, которое также работает при вставке строк непосредственно в базу данных, вы можете использовать GenerationType.IDENTITY, который основан на автонумерации столбца в базе данных.Несмотря на простоту, он не самый производительный.Но, вероятно, ничего страшного, если количество вставок относительно мало.

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