Что нужно сделать что бы класс стал сущностью?
Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
Что нужно сделать, чтобы класс стал сущностью в Hibernate
Сущность в Hibernate — это класс, который отображает таблицу в БД и управляется контейнером персистентности. Чтобы превратить обычный класс в сущность, нужно выполнить несколько ключевых шагов.
Основные требования
1. Аннотация @Entity
Самый важный шаг — пометить класс аннотацией @Entity. Это сигнал Hibernate, что класс представляет таблицу в БД:
import javax.persistence.Entity;
import javax.persistence.Table;
@Entity
@Table(name = "users")
public class User {
// поля и методы
}
2. Первичный ключ (Primary Key)
Любая сущность обязательно должна иметь первичный ключ — поле, помеченное @Id. Это уникальный идентификатор записи в таблице:
@Entity
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
private String email;
}
3. Конструктор без параметров Hibernate использует рефлексию для создания экземпляров сущности, поэтому класс обязательно должен иметь конструктор без параметров (может быть package-private):
@Entity
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
// Hibernate требует конструктор без параметров
public User() {}
public User(String name) {
this.name = name;
}
}
Полный пример сущности
import javax.persistence.*;
import java.time.LocalDateTime;
@Entity
@Table(name = "users", uniqueConstraints = {
@UniqueConstraint(columnNames = "email")
})
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(nullable = false, length = 100)
private String name;
@Column(nullable = false, unique = true)
private String email;
@Column(name = "created_at")
private LocalDateTime createdAt;
// Конструктор без параметров
public User() {}
public User(String name, String email) {
this.name = name;
this.email = email;
this.createdAt = LocalDateTime.now();
}
// Getters и Setters
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; }
public String getEmail() { return email; }
public void setEmail(String email) { this.email = email; }
}
Дополнительные аннотации
- @Table(name = "users") — явно указывает имя таблицы. Если не указана, используется имя класса в нижнем регистре
- @Column — кастомизация параметров колонки (размер, nullable, уникальность)
- @GeneratedValue — автогенерация значения первичного ключа (AUTO, IDENTITY, SEQUENCE, TABLE)
- @Transient — отмечает поле, которое не должно сохраняться в БД
Краткий чеклист
- ✅ Класс помечен
@Entity - ✅ Есть поле с
@Id - ✅ Есть конструктор без параметров
- ✅ Класс не final
- ✅ Все поля имеют getters/setters
Этих пяти пунктов достаточно, чтобы Hibernate увидел класс как сущность и начал управлять его экземплярами через SessionFactory и Hibernate ORM.