Ответ
Для того чтобы класс был отображен как сущность в JPA (Java Persistence API), он должен соответствовать следующим требованиям:
- Аннотация
@Entity: Класс должен быть помечен этой аннотацией. - Открытый или защищенный конструктор без аргументов: Обязателен для фреймворка при создании экземпляров через рефлексию.
public User() {} - Не быть
final: Класс, его поля и геттеры/сеттеры не должны быть объявлены какfinal, чтобы Hibernate мог создать прокси для ленивой загрузки. - Наличие первичного ключа (
@Id): Должно быть хотя бы одно поле, аннотированное@Id. Часто используется@GeneratedValueдля автоматической генерации. - Доступ к состоянию: Поля должны быть доступны либо напрямую (не
private), либо через геттеры/сеттеры в соответствии с JavaBeans-конвенцией.
Пример корректной сущности:
@Entity
@Table(name = "users") // Опционально: задает имя таблицы
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String username;
private String email;
// Обязательный конструктор
public User() {}
// Геттеры и сеттеры
public Long getId() { return id; }
// ... остальные геттеры/сеттеры
}
Важно: Сущность также должна быть привязана к уникальной таблице (или представлению) в БД. Поля, не предназначенные для сохранения, помечаются @Transient.