Какие знаешь стратегии генерации id в Hibernate

«Какие знаешь стратегии генерации id в Hibernate» — вопрос из категории Hibernate, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Hibernate поддерживает несколько стратегий генерации ID:

  1. IDENTITY - использует автоинкремент БД.
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
  1. SEQUENCE - использует sequence БД (оптимально для Oracle, PostgreSQL).
    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE)
    private Long id;
  1. TABLE - эмулирует sequence через отдельную таблицу (универсально, но медленно).
    @Id
    @GeneratedValue(strategy = GenerationType.TABLE)
    private Long id;
  1. AUTO (дефолт) - Hibernate сам выбирает стратегию.

  2. UUID - генерирует строковый UUID.

    @Id
    @GeneratedValue(generator = "UUID")
    @GenericGenerator(name = "UUID", strategy = "org.hibernate.id.UUIDGenerator")
    private String id;

Выбор зависит от БД и требований к производительности. SEQUENCE предпочтительнее для больших нагрузок.