Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
# Что такое Entity?
Entity (Сущность) — это Java-класс, который представляет таблицу в реляционной базе данных. Каждый экземпляр Entity соответствует одной строке в таблице, а поля класса — столбцам таблицы.
В контексте JPA/Hibernate
Entity — это основной строительный блок для работы с БД в JPA. Он аннотируется @Entity и используется для маппирования объектов на таблицы БД.
@Entity
@Table(name = "users")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(name = "name", nullable = false)
private String name;
@Column(name = "email", unique = true)
private String email;
@Enumerated(EnumType.STRING)
private Role role;
@CreationTimestamp
private LocalDateTime createdAt;
}
Ключевые аннотации
@Entity — отмечает класс как Entity для маппирования на БД.
@Table — указывает имя таблицы, если оно отличается от имени класса.
@Id — определяет первичный ключ.
@GeneratedValue — задаёт стратегию генерации ID (IDENTITY, SEQUENCE, TABLE, AUTO).
@Column — настраивает маппирование столбца (name, nullable, unique, length).
@Enumerated — маппирует enum в БД (STRING или ORDINAL).
@CreationTimestamp / @UpdateTimestamp — автоматически устанавливают время создания/обновления.
Типы отношений
@OneToOne — один-к-одному
@OneToOne
private Address address;
@OneToMany — один-ко-многим
@OneToMany(mappedBy = "user")
private List<Order> orders;
@ManyToOne — много-к-одному
@ManyToOne
private User user;
@ManyToMany — много-ко-многим
@ManyToMany
@JoinTable(name = "user_roles",
joinColumns = @JoinColumn(name = "user_id"),
inverseJoinColumns = @JoinColumn(name = "role_id"))
private List<Role> roles;
Lifecycle Entity
New (Transient) — объект создан, но не сохранён в БД.
Managed (Persistent) — объект управляется persistence context, его изменения отслеживаются.
Detached — объект больше не управляется (сессия закрыта).
Removed — объект помечен для удаления из БД.
Правила для Entity
- Должен иметь конструктор без аргументов (может быть protected)
- Не должен быть final классом
- Поля не должны быть final
- Должен реализовать Serializable (рекомендуется)
- Должен иметь @Id аннотацию
Spring Data Repository
Entity используется с Repository для CRUD операций:
public interface UserRepository extends JpaRepository<User, Long> {
User findByEmail(String email);
}
// Использование
User user = new User();
user.setName("John");
userRepository.save(user); // Сохранение
User found = userRepository.findById(1L);
List<User> all = userRepository.findAll();
Entity — основная единица работы с данными в Java-приложениях, обеспечивающая прозрачное маппирование между объектной и реляционной моделями данных.