Ответ
Класс, являющийся JPA-сущностью (Entity), должен соответствовать следующим требованиям:
- Аннотация
@Entity: Помечает класс как постоянную сущность. - Первичный ключ (
@Id): Должно быть хотя бы одно поле с аннотацией@Id. Часто используется@GeneratedValueдля автоинкремента. - Конструктор без аргументов: Должен быть
publicилиprotectedконструктор по умолчанию. - Класс не должен быть
final: Поля (или геттеры) не должны бытьfinal, если используется проксирование (например, для ленивой загрузки).
Рекомендуемые (но не обязательные) практики:
- Реализация методов
equals()иhashCode()(обычно на основе первичного ключа). - Использование аннотаций
@Table,@Columnдля явного указания имен таблиц и столбцов. - Наличие геттеров и сеттеров для полей.
Минимальный рабочий пример:
import javax.persistence.*;
@Entity // 1. Обязательная аннотация
public class Product {
@Id // 2. Обязательный первичный ключ
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name; // Имя столбца будет 'name'
public Product() {} // 3. Обязательный конструктор без аргументов
// Геттеры и сеттеры
public Long getId() { return id; }
public void setId(Long id) { this.id = id; }
public String getName() { return name; }
public void setName(String name) { this.name = name; }
}
Важно: Сущность не должна содержать логики бизнес-процессов, это должен быть простой POJO-класс для отображения данных.