В чем причина прыжка GeneratedValue (стратегии = GenerationType.TABLE), если не указан @TableGenerator? - PullRequest
4 голосов
/ 24 мая 2010

Почему мне нужно добавить allocSize = 1 при использовании @TableGenerator, чтобы идентификатор не переместился с 1, 2, ... до 32, xxx, 65, xxx, ... после перезапуска jvm

Есть ли конструктивная причина для необходимости указывать размер размещения?

Этот фрагмент даст идентификаторы прыжков

@Id
@GeneratedValue(strategy = GenerationType.TABLE)
private Long id;

Вот модифицированный фрагмент, который производит правильно упорядоченные идентификаторы

@Id
@GeneratedValue(strategy = GenerationType.TABLE, generator = "account_generator")
@TableGenerator(name = "account_generator", initialValue = 1, allocationSize = 1)
private Long id;

Ответы [ 2 ]

2 голосов
/ 25 мая 2010

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

0 голосов
/ 27 мая 2010

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

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

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