Ответ
Для делегирования генерации первичного ключа базе данных используется аннотация @GeneratedValue, которая указывается вместе с @Id.
Основные стратегии (strategy):
Стратегия (GenerationType) |
Описание | Пример СУБД |
|---|---|---|
IDENTITY |
База данных генерирует уникальное значение (автоинкремент). ID становится известен только после INSERT. |
MySQL AUTO_INCREMENT, PostgreSQL SERIAL/BIGSERIAL. |
SEQUENCE |
Использует объект sequence базы данных для генерации значений. Более эффективно, чем TABLE. |
Oracle, PostgreSQL. |
TABLE |
Эмулирует sequence с помощью отдельной таблицы. Универсально, но наименее производительно. | Любая СУБД. |
AUTO (по умолчанию) |
Провайдер JPA (Hibernate) сам выбирает стратегию. | Зависит от диалекта. |
Рекомендуемый пример для PostgreSQL/MySQL:
@Entity
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY) // База данных сама увеличивает значение
private Long id;
private String name;
// ...
}
Важно: Стратегия SEQUENCE в Hibernate часто предпочтительнее для пакетной вставки, так как позволяет эффективнее использовать batch-операции.