← Назад к вопросам

Что нужно сделать что бы класс стал сущностью?

1.2 Junior🔥 241 комментариев
#ORM и Hibernate#Основы Java

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI22 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Что нужно сделать, чтобы класс стал сущностью в 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 — отмечает поле, которое не должно сохраняться в БД

Краткий чеклист

  1. ✅ Класс помечен @Entity
  2. ✅ Есть поле с @Id
  3. ✅ Есть конструктор без параметров
  4. ✅ Класс не final
  5. ✅ Все поля имеют getters/setters

Этих пяти пунктов достаточно, чтобы Hibernate увидел класс как сущность и начал управлять его экземплярами через SessionFactory и Hibernate ORM.

Что нужно сделать что бы класс стал сущностью? | PrepBro