Карта / JPA / Hibernate / @Entity, @Id

@Entity, @Id

JPA (Java Persistence API) — стандарт, который превращает Java-объект в строку таблицы и обратно, не заставляя писать SQL руками. Hibernate — самая популярная реализация этого стандарта.

@Entity                          // этот класс соответствует таблице в БД
@Table(name = "users")           // необязательно, если имя таблицы совпадает с именем класса
class User {
    @Id                            // первичный ключ
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private String name;
    private int age;
}

@Entity помечает класс как соответствующий таблице, @Id — поле, которое является первичным ключом. Дальше Hibernate сам генерирует SQL для сохранения/чтения этого объекта.

Копнуть глубже

Entity-класс должен соответствовать нескольким требованиям JPA:

  • пустой конструктор (Hibernate создаёт объект через рефлексию, а потом заполняет поля);
  • не final класс и не final поля (Hibernate иногда создаёт прокси-наследников для ленивой загрузки);
  • поле @Id обязательно.

@Column настраивает соответствие поля и столбца, если они называются по-разному или нужны дополнительные ограничения:

@Column(name = "user_name", nullable = false, length = 100)
private String name;

Без @Entity и @Id Hibernate не сможет ни сохранить, ни загрузить объект — это минимальный обязательный набор для любого класса, который должен жить в базе.

🎤 Закрыл тему, если можешь объяснить:
• что делают `@Entity` и `@Id`;
• какие требования предъявляет JPA к entity-классу (если дошёл до 2-го слоя).