Ответ
Java Persistence API (JPA) — это стандарт ORM (Object-Relational Mapping) в Java. Аннотации JPA используются для декларативного описания соответствия между Java-классами (сущностями) и таблицами базы данных.
Основные аннотации для маппинга сущности:
| Аннотация | Назначение |
|---|---|
@Entity |
Помечает класс как JPA-сущность. Обязательна. |
@Table(name = "...") |
Задаёт имя таблицы в БД. Если не указано, используется имя класса. |
@Id |
Помечает поле как первичный ключ. |
@GeneratedValue |
Определяет стратегию генерации значений для @Id (IDENTITY, SEQUENCE, TABLE, AUTO). |
@Column(name = "...") |
Связывает поле со столбцом таблицы. Позволяет задать nullable, unique, length. |
@Enumerated(EnumType.STRING) |
Указывает, как сохранять enum (по строковому имени или порядковому номеру). |
@Temporal(TemporalType.DATE) |
Указывает точность для полей java.util.Date/Calendar. |
@Lob |
Помечает поле для хранения больших объектов (BLOB/CLOB). |
Пример отображения простой сущности:
@Entity
@Table(name = "employees") // Таблица в БД будет называться "employees"
public class Employee {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY) // Автоинкремент в БД
private Long id;
@Column(name = "full_name", nullable = false, length = 100)
private String name;
@Column(unique = true)
private String email;
@Enumerated(EnumType.STRING) // Сохраняем как строку 'JUNIOR', 'SENIOR'
private EmployeeLevel level;
// Конструкторы, геттеры, сеттеры
}
Аннотации для связей между сущностями:
@OneToOne,@OneToMany,@ManyToOne,@ManyToMany— определяют тип связи.@JoinColumn— указывает столбец внешнего ключа.@JoinTable— определяет таблицу-ассоциацию для связи@ManyToMany.
Пример связи @ManyToOne:
@Entity
public class Order {
@Id
private Long id;
@ManyToOne(fetch = FetchType.LAZY) // Загрузка по требованию
@JoinColumn(name = "customer_id") // Столбец внешнего ключа в таблице 'order'
private Customer customer;
}
Преимущества: Аннотации позволяют описывать схему данных прямо в коде, что делает её наглядной и упрощает разработку. Провайдер JPA (например, Hibernate) на основе этих аннотации генерирует необходимые SQL-запросы.