Каков точный смысл аннотации JPA @Entity?

Я изучаю JPA в приложении Spring и у меня есть некоторые сомнения, связанные с аннотацией @Entity.

Итак, у меня есть такой класс моделей:

@Entity
@Table(name= 'T_CUSTOMER')
public class Customer {

    @Id
    @Column(name='cust_id')
    private Long id;

    @Column(name='first_name')
    private String firstName;

    @Transient
    private User currentUser;

    ...........................
    ...........................
    ...........................
}

Хорошо, я знаю, что аннотация @Entity находится на уровне класса, и это означает, что поля объекта, которые являются экземплярами этого класса, должны быть сопоставлены с полем T_CUSTOMER таблица базы данных.

Но почему в JPA обязательно использовать аннотацию @Entity, а я не могу использовать аннотацию @Table только для сопоставления объекта модели с конкретной таблицей базы данных? У него есть какое-то другое значение\поведение, которого я на самом деле скучаю?

Чего мне не хватает? Каков точный смысл аннотации @Entity?

Ответ 1

@Entity аннотация определяет, что класс может быть сопоставлен с таблицей. И это все, это всего лишь маркер, например, как интерфейс Serializable.

А почему @Entity аннотация обязательна?... ну, именно так разработан JPA. Когда вы создаете новый объект, вам нужно сделать хотя бы две вещи.

  • аннотировал его с помощью @Entity

  • создать поле id и аннотировать его с помощью @Id

Любое другое необязательно, например, имя таблицы выводится из имени класса сущности (и, следовательно, аннотация @Table может быть необязательной), столбцы таблицы производятся из переменных сущностей (и поэтому аннотация @Column может быть необязательной) и так далее...

JPA пытается обеспечить быстрый и простой запуск для разработчиков, которые хотят изучить/использовать этот API, и дать разработчикам возможность настроить как можно меньше возможностей, чтобы сделать что-то функциональное, одним из способов, которым этот API хочет достичь эта "простая в использовании/учиться" цель. Следовательно, аннотация @Entity (вместе с аннотацией @Id) - это минимум, который вы должны сделать, чтобы создать сущность.

Ответ 2

Объекты в JPA - это не что иное, как POJO, представляющие данные, которые можно сохранить в базе данных. Сущность представляет таблицу, хранящуюся в базе данных. Каждый экземпляр объекта представляет строку в таблице.

Подробнее о лицах:https://www.baeldung.com/jpa-entities