Sobes.tech
Назад к вопросам
Junior — Middle
40

Объясните предназначение аннотации @Entity в контексте работы с ORM в Java.

Ответ от нейросети

sobes.tech AI

Что хотят услышать интервьюеры:

@Entity показывает ORM, что класс нужно рассматривать как сущность и хранить его состояние в таблице базы данных. Обычно ожидают услышать, что у сущности должен быть идентификатор, а ORM по этой аннотации умеет выполнять CRUD-операции. Также важно понимать, что это часть JPA-модели, а не просто обычная метка для класса.

Определение:

@Entity — это JPA-аннотация, которая помечает класс как постоянную сущность, сопоставляемую с таблицей в базе данных. ORM-фреймворк использует такой класс для загрузки, сохранения, обновления и удаления данных. Обычно у сущности есть поле идентификатора, по которому она однозначно определяется в БД.

Пример использования:

import jakarta.persistence.Entity;
import jakarta.persistence.Id;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;

@Entity
public class User {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private String name;
    private String email;

    // getters and setters
}

В этом примере класс User становится сущностью, которую ORM может связать с таблицей user или с таблицей, заданной через дополнительные аннотации.

Пояснение кода:

  • @Entity сообщает JPA-провайдеру, что User — это объект, который нужно сохранять в БД.
  • @Id указывает поле первичного ключа.
  • @GeneratedValue задаёт стратегию генерации идентификатора.
  • Поля name и email по умолчанию будут отображаться на столбцы таблицы.
  • ORM сможет создавать SQL-запросы для вставки, чтения, обновления и удаления объектов этого класса.

Ключевые моменты:

  • @Entity делает класс управляемым ORM как сущность базы данных.
  • У сущности должен быть идентификатор, обычно помеченный @Id.
  • Аннотация используется в JPA и поддерживается ORM-фреймворками вроде Hibernate.
  • Класс-сущность должен быть пригоден для маппинга: обычно нужен конструктор без аргументов и доступ к полям через getter/setter.
  • @Entity сама по себе не создаёт таблицу, а лишь задаёт семантику отображения класса на БД.