Какие используешь аннотации при написании Entity?
Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
Аннотации для Entity в Java (JPA / Hibernate)
При написании Entity-классов в Java (в контексте JPA или Hibernate) аннотации используются для описания соответствия класса и его полей таблицам и колонкам базы данных. Это ключевой инструмент для ORM (Object-Relational Mapping).
Основные аннотации уровня класса (Class-Level Annotations)
-
@Entity— самая важная аннотация. Она указывает, что данный класс является JPA Entity и будет связан с таблицей в базе данных. Без нее класс не будет восприниматься как сущность.@Entity public class Customer { // ... } -
@Table— позволяет задать специфические детали таблицы, с которой связана сущность. Если имя таблицы отличается от имени класса, используется параметрname.@Entity @Table(name = "tbl_customers") public class Customer { // ... }
Аннотации для первичного ключа (Primary Key)
-
@Id— указывает, что поле является первичным ключом сущности.@Id private Long id; -
@GeneratedValue— определяет стратегию генерации уникальных значений для первичного ключа. Часто используется вместе с@Id. Основные стратегии:AUTO,IDENTITY,SEQUENCE,TABLE.@Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id;
Аннотации для полей и колонок (Field/Column-Level Annotations)
-
@Column— предоставляет детали для колонки таблицы, соответствующей данному полю: имя (name), возможность null (nullable), уникальность (unique), длина (lengthдля строк).@Column(name = "email_address", nullable = false, unique = true, length = 100) private String email; -
@Basic— указывает на простую (базовую) связь поля с колонкой. Часто используется явно, когда нужно задать параметрыfetch(способ загрузки) илиoptional(может быть null).@Basic(fetch = FetchType.LAZY, optional = false) private String comment; -
@Enumerated— определяет, как типEnumдолжен сохраняться в базе данных: как строка (EnumType.STRING) или как порядковый номер (EnumType.ORDINAL).EnumType.STRINGрекомендуется для устойчивости к изменениям порядка enum.@Enumerated(EnumType.STRING) private Status status; -
@Temporal— используется для полей типаDateилиCalendarдля указания точности сохраняемого времени: только дата (DATE), только время (TIME), дата и время (TIMESTAMP).@Temporal(TemporalType.DATE) private Date birthDate; -
@Lob— обозначает, что поле должно быть сохранено как большой объект (Large Object). Для строк это обычноCLOB, для байтовых массивов —BLOB.@Lob private String largeText; -
@Transient— указывает, что поле НЕ должно быть сохранено в базе данных. Оно существует только на уровне объекта.@Transient private transientField;
Аннотации для связей между сущностями (Relationship Annotations)
-
@OneToOne,@OneToMany,@ManyToOne,@ManyToMany— определяют тип связи между сущностями.@OneToMany(mappedBy = "customer") private List<Order> orders; -
@JoinColumn— используется для указания деталей колонки, которая является внешним ключом в связи (например, в@ManyToOneили@OneToOne).@ManyToOne @JoinColumn(name = "customer_id", referencedColumnName = "id") private Customer customer; -
@JoinTable— применяется для описания таблицы связей в случае@ManyToMany.
Аннотации для встраиваемых объектов (Embedded Objects)
-
@Embeddable— помечает класс как встраиваемый (его поля будут колонками в таблице основной сущности).@Embeddable public class Address { private String street; private String city; } -
@Embedded— в основной сущности указывает, что поле является встраиваемым объектом.@Entity public class Customer { @Embedded private Address address; } -
@AttributeOverride— позволяет переопределить колонки встраиваемого объекта для данной сущности (например, изменить имя колонки).
Важные аннотации жизненного цикла и прочие
-
@Version— используется для поля, которое участвует в оптимистичной блокировке (optimistic locking). Помогает предотвратить конфликты параллельных обновлений.@Version private Long version; -
Аннотации жизненного цикла, такие как
@PrePersist,@PostPersist,@PreUpdate,@PostUpdateи др., позволяют задавать методы, которые будут вызываться автоматически перед или после определенных событий JPA (сохранение, обновление). Это удобно для вычисления полей или логирования.
Резюме
Выбор аннотации зависит от конкретной модели данных. Основной набор включает @Entity, @Id, @GeneratedValue, @Column. Для сложных моделей добавляются аннотации связей (@OneToMany и др.), @Embedded для композиции и @Enumerated для энумов. Правильное использование аннотации @Version критично для многопользовательских систем. Все эти аннотации делают код сущностей декларативным и отвязывают его от прямого SQL, что является основной целью ORM.