Ответ
Для маппинга класса на таблицу БД с помощью JPA/Hibernate класс должен быть сущностью (Entity). Основные шаги и свойства:
- Пометить класс аннотацией
@Entity. - Определить первичный ключ с помощью
@Id. Часто используется@GeneratedValueдля автоматической генерации ID. - Сопоставить класс с таблицей (опционально, но рекомендуется) с помощью
@Table(name = "table_name"). - Сопоставить поля со столбцами с помощью
@Column. Без этой аннотации поле всё равно будет маппиться на столбец с тем же именем. - Соблюсти требования JPA к Entity (пустой конструктор, не-final класс и методы).
Полный пример маппинга:
@Entity // 1. Объявляем сущность
@Table(name = "employees") // 3. Указываем имя таблицы
public class Employee {
@Id // 2. Первичный ключ
@GeneratedValue(strategy = GenerationType.IDENTITY) // Автоинкремент в БД
private Long id;
@Column(name = "full_name", length = 200, nullable = false) // 4. Маппинг поля
private String name;
@Column(unique = true) // Ограничение UNIQUE
private String email;
@Transient // Поле НЕ будет сохранено в БД
private String temporaryCode;
// 5. Обязательный конструктор
public Employee() {}
// Конструктор для удобства
public Employee(String name, String email) {
this.name = name;
this.email = email;
}
// Геттеры и сеттеры...
}
Ключевые аннотации для связей между таблицами:
@OneToMany,@ManyToOne,@OneToOne,@ManyToMany— для отображения связей.@JoinColumn— для указания столбца внешнего ключа.
Почему @Column не всегда обязателен?
Hibernate по умолчанию маппит поле на столбец с тем же именем. Однако @Column необходим для задания дополнительных свойств: nullable, unique, length (для строк), precision/scale (для чисел).