Каков точный смысл аннотации 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. Когда вы создаете новый объект, вам нужно сделать хотя бы две вещи.
Любое другое необязательно, например, имя таблицы выводится из имени класса сущности (и, следовательно, аннотация @Table
может быть необязательной), столбцы таблицы производятся из переменных сущностей (и поэтому аннотация @Column
может быть необязательной) и так далее...
JPA пытается обеспечить быстрый и простой запуск для разработчиков, которые хотят изучить/использовать этот API, и дать разработчикам возможность настроить как можно меньше возможностей, чтобы сделать что-то функциональное, одним из способов, которым этот API хочет достичь эта "простая в использовании/учиться" цель. Следовательно, аннотация @Entity
(вместе с аннотацией @Id
) - это минимум, который вы должны сделать, чтобы создать сущность.
Ответ 2
Объекты в JPA - это не что иное, как POJO, представляющие данные, которые можно сохранить в базе данных. Сущность представляет таблицу, хранящуюся в базе данных. Каждый экземпляр объекта представляет строку в таблице.
Подробнее о лицах:https://www.baeldung.com/jpa-entities