hibernate @GeneratedValue правильно? - PullRequest
4 голосов
/ 26 ноября 2009

Я установил свойство сущности

@GeneratedValue
Long id;

и смог создать идентификатор для сущности в базе данных.У меня вопрос, почему все сущности имеют одинаковое добавочное число? не каждая ли таблица должна начинать отсчет с нуля?

Ответы [ 2 ]

7 голосов
/ 26 ноября 2009

Это зависит от базовой базы данных. GenerationType по умолчанию имеет значение АВТО, и Hibernate выбирает один из трех вариантов в зависимости от базы данных. Если вы хотите использовать один из них, установите его как атрибут @GeneratedValue

2 голосов
/ 26 ноября 2009

Это зависит от базы данных. Реализации JPA используют разные генераторы идентификаторов в зависимости от используемой системы баз данных. Например, в Oracle будет создана одна последовательность, и эта последовательность будет использоваться для генерации идентификаторов для всех типов объектов. По умолчанию он не создает последовательность для каждого объекта, поскольку обычно нет причин для этого. Та же логика применяется к другим системам баз данных, которые используют последовательности, а не столбцы с автоинкрементом.

Я не уверен на 100%, позволяет ли API JPA изменить это поведение, но я знаю, что аннотации Hibernate делают. Однако вы не сообщили нам, какую базу данных вы используете или какую реализацию JPA используете, поэтому я не могу дать вам гораздо больше советов, чем эта.

...