Ответ
Hibernate поддерживает несколько стратегий генерации ID:
- IDENTITY - использует автоинкремент БД.
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
- SEQUENCE - использует sequence БД (оптимально для Oracle, PostgreSQL).
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE)
private Long id;
- TABLE - эмулирует sequence через отдельную таблицу (универсально, но медленно).
@Id
@GeneratedValue(strategy = GenerationType.TABLE)
private Long id;
-
AUTO (дефолт) - Hibernate сам выбирает стратегию.
-
UUID - генерирует строковый UUID.
@Id
@GeneratedValue(generator = "UUID")
@GenericGenerator(name = "UUID", strategy = "org.hibernate.id.UUIDGenerator")
private String id;
Выбор зависит от БД и требований к производительности. SEQUENCE предпочтительнее для больших нагрузок.