Ответ
Отношение «один ко многим» (One-to-Many) означает, что одна сущность (родительская) может быть связана с несколькими экземплярами другой сущности (дочерней). Обратное отношение — «многие к одному» (Many-to-One).
Пример: Блог и его посты.
Один блог (Blog) может содержать множество постов (Post), но каждый пост принадлежит только одному блогу.
Реализация в JPA/Hibernate (Java):
@Entity
public class Blog {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
// Владелец связи. Один Блог -> Много Постов.
// CascadeType.ALL: операции с блогом применяются к его постам.
// orphanRemoval = true: пост удаляется из БД при удалении из коллекции.
@OneToMany(mappedBy = "blog", cascade = CascadeType.ALL, orphanRemoval = true)
private List<Post> posts = new ArrayList<>();
// Метод для корректного управления связью с обеих сторон
public void addPost(Post post) {
posts.add(post);
post.setBlog(this);
}
// getters, setters, конструкторы
}
@Entity
public class Post {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String title;
// Обратная сторона связи. Много Постов -> Один Блог.
// @JoinColumn определяет столбец внешнего ключа в таблице `post`.
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "blog_id")
private Blog blog;
// getters, setters, конструкторы
}
Объяснение аннотаций:
@OneToMany(mappedBy = "blog"): Связь управляется полемblogв классеPost. Столбец внешнего ключа находится в таблицеPost.@ManyToOne: Определяет обратную сторону связи.FetchType.LAZY— посты загружаются только при обращении к ним (оптимизация производительности).- Внешний ключ: В таблице
postбудет столбецblog_id, ссылающийся наblog.id.
Схема в БД:
CREATE TABLE blog (id BIGINT PRIMARY KEY, name VARCHAR(255));
CREATE TABLE post (
id BIGINT PRIMARY KEY,
title VARCHAR(255),
blog_id BIGINT,
FOREIGN KEY (blog_id) REFERENCES blog(id)
);