Hibernate Авто Инкремент - PullRequest
       2

Hibernate Авто Инкремент

3 голосов
/ 05 августа 2010

Я использую генератор "приращения" в hibernate для генерации идентификаторов автоинкремента.Это работало нормально, пока мне не пришлось добавить другое приложение, которое также использует генератор «приращения» для генерации новых идентификаторов.Я понял, что есть ловушка с генератором приращений:

"generates identifiers of type long, short or int that are unique only when no other process is inserting data into the same table. Do not use in a cluster."

Есть ли способ справиться с этим, используя hibernate?Или мне придется написать дополнительный код для блокировки таблицы, проверить БД на максимальный идентификатор (и затем увеличить его) и, наконец, снять блокировку?Использование одной конфигурации гибернации не вариант.Также я не могу добавить опцию auto_increment в таблицу db, потому что у нас есть более одного ключа в таблице.

Любые предложения приветствуются, я думаю, это общая проблема.

1 Ответ

4 голосов
/ 05 августа 2010

Есть несколько других генераторов , которые могут дать вам то, что вам нужно:

  • hilo использует алгоритм hi / lo для эффективной генерации идентификаторов типа long, short или int с учетом таблицы и столбца (по умолчанию hibernate_unique_key и next_hi соответственно) в качестве источника значений hi. Алгоритм hi / lo генерирует идентификаторы, которые являются уникальными только для конкретной базы данных.
  • uuid : использует 128-битный алгоритм UUID для генерации идентификаторов строки типа, которые являются уникальными в сети (используется IP-адрес). UUID кодируется как строка из 32 шестнадцатеричных цифр в длину.

Я бы рекомендовал взглянуть на hi / lo .

Также я не могу добавить опцию auto_increment в таблицу db, потому что у нас в таблице более одного ключа.

Я считаю, что это утверждение сбивает с толку - вы не можете иметь автоинкремент одного столбца, если первичный ключ таблицы использует более одного столбца?

Зачем вам первичный ключ из более чем одного столбца, где один из столбцов в любом случае уникален - это делает невозможным когда-либо иметь более одного значения для поля id, что сводит на нет назначение составного PK .

...