Что такое Entity в JPA?

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

Ответ

Entity (Сущность) в JPA — это легковесный Java-класс (POJO), отображаемый на таблицу в реляционной базе данных. Его экземпляры соответствуют строкам в этой таблице.

Основные требования:

  • Аннотация @Entity.
  • Поле с аннотацией @Id, обозначающее первичный ключ.
  • Конструктор без аргументов (может быть protected).
  • Класс не должен быть final, а методы getter/setter — final (для проксирования).

Ключевые аннотации:

  • @Table — для указания имени таблицы.
  • @Column — для маппинга поля на колонку.
  • @GeneratedValue — для стратегии генерации ID.
  • Аннотации связей: @OneToMany, @ManyToOne, @ManyToMany, @OneToOne.

Пример:

@Entity
@Table(name = "users")
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

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

    @Column(unique = true)
    private String email;

    // Конструктор без аргументов, геттеры, сеттеры
}

Почему это важно: Entity — это центральная концепция ORM в JPA, позволяющая работать с данными как с объектами, а не SQL-запросами.