Что такое Entity в контексте JPA/Hibernate?

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

Ответ

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

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

  1. @Entity: Обязательная аннотация для класса.
  2. @Id: Обозначает поле, являющееся первичным ключом.
  3. @GeneratedValue: Задает стратегию генерации значений для первичного ключа (например, автоинкремент).
  4. @Table: Опционально, задает имя таблицы. По умолчанию используется имя класса.
  5. @Column: Опционально, задает имя столбца и другие атрибуты.

Пример Entity:

@Entity
@Table(name = "users") // Соответствует таблице "users" в БД
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY) // Автоинкремент
    private Long id;

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

    // Обязательный конструктор по умолчанию (JPA requirement)
    public User() {}

    // Геттеры и сеттеры для всех полей
    public Long getId() { return id; }
    public void setId(Long id) { this.id = id; }
    // ... остальные геттеры/сеттеры
}

Важные особенности:

  • Должен иметь конструктор без аргументов (может быть protected).
  • Поля обычно имеют private доступ и управляются через геттеры/сеттеры.
  • Может содержать связи с другими Entity (аннотации @OneToMany, @ManyToOne и т.д.).
  • Entity представляет собой модель данных для работы с БД, в отличие от DTO, который используется для передачи данных.