Если для столбца таблицы базы данных установлено значение auto_increment, то почему мы используем @generatedValue? - PullRequest
0 голосов
/ 15 мая 2019

Мне действительно трудно понять, почему @generatedValue используется для автоматического увеличения, когда таблица уже предоставляет auto_increment.Могут ли некоторые объяснить это мне?

1 Ответ

0 голосов
/ 15 мая 2019

@GeneratedValue используется, чтобы сообщить провайдеру JPA, что конкретное поле должно получить сгенерированное значение. Затем на основе GenerationType, переданной в аннотацию @GeneratedValue, поставщик решит, как присвоить значения первичным ключам, например, делегировав их некоторому механизму базы данных.

Например, для баз данных oracle требуются последовательности, чтобы получить сгенерированные значения для первичных ключей, поэтому в случае использования базы данных oracle вы должны передать GenerationType.SEQUENCE в @GeneratedValue, и вам также потребуется создать такую ​​последовательность.

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

Как указано в документации для GenerationType.IDENTITY:

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

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

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