@Entity, @Id
JPA (Java Persistence API) — стандарт, который превращает Java-объект в строку таблицы и обратно, не заставляя писать SQL руками. Hibernate — самая популярная реализация этого стандарта.
@Entity // этот класс соответствует таблице в БД
@Table(name = "users") // необязательно, если имя таблицы совпадает с именем класса
class User {
@Id // первичный ключ
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
private int age;
}
@Entity помечает класс как соответствующий таблице, @Id — поле, которое является первичным ключом. Дальше Hibernate сам генерирует SQL для сохранения/чтения этого объекта.
Копнуть глубже
Entity-класс должен соответствовать нескольким требованиям JPA:
- пустой конструктор (Hibernate создаёт объект через рефлексию, а потом заполняет поля);
- не
finalкласс и неfinalполя (Hibernate иногда создаёт прокси-наследников для ленивой загрузки); - поле
@Idобязательно.
@Column настраивает соответствие поля и столбца, если они называются по-разному или нужны дополнительные ограничения:
@Column(name = "user_name", nullable = false, length = 100)
private String name;
Без @Entity и @Id Hibernate не сможет ни сохранить, ни загрузить объект — это минимальный обязательный набор для любого класса, который должен жить в базе.
🎤 Закрыл тему, если можешь объяснить:
• что делают `@Entity` и `@Id`;
• какие требования предъявляет JPA к entity-классу (если дошёл до 2-го слоя).
• какие требования предъявляет JPA к entity-классу (если дошёл до 2-го слоя).