@GeneratedValue
используется, чтобы сообщить провайдеру JPA, что конкретное поле должно получить сгенерированное значение. Затем на основе GenerationType
, переданной в аннотацию @GeneratedValue
, поставщик решит, как присвоить значения первичным ключам, например, делегировав их некоторому механизму базы данных.
Например, для баз данных oracle требуются последовательности, чтобы получить сгенерированные значения для первичных ключей, поэтому в случае использования базы данных oracle вы должны передать GenerationType.SEQUENCE
в @GeneratedValue
, и вам также потребуется создать такую последовательность.
В случае баз данных MySQL вы должны передать GenerationType.IDENTITY
, а под ним будет использоваться AUTO_INCREMENT
столбца первичного ключа в вашей таблице MySQL.
Как указано в документации для GenerationType.IDENTITY
:
IDENTITY
Указывает, что поставщик сохраняемости должен назначить первичные ключи для объекта, используя столбец идентификаторов базы данных.
Нам нужны все эти аннотации, потому что JPA - это просто абстракция для работы с реляционными базами данных, и она может работать с разными базами данных, которые используют другой механизм ниже. Hibernate - только одна из реализаций JPA.