@cierra
Mapping Many-to-Many в Hibernate относится к способу связывания двух сущностей, где каждая из них может иметь несколько связанных сущностей другой стороны. Таким образом, одна сущность может соответствовать многим другим сущностям, а также множество сущностей может соответствовать одной сущности.
В Hibernate для реализации связи Many-to-Many необходимо создать третью таблицу, которая будет содержать в себе ключи обеих связанных сущностей. Эта таблица называется таблицей-связью, или таблицей-ассоциации.
В классе каждой сущности, участвующей в связи Many-to-Many, нужно использовать аннотацию @ManyToMany
, которая указывает на связь с другой сущностью. Также нужно указать имя таблицы-ассоциации, а также поля, которые будут использоваться в качестве ключей связи.
Например, если есть две сущности, Book
и Author
, и каждая книга может иметь несколько авторов, а каждый автор может быть связан с несколькими книгами, то для реализации связи Many-to-Many необходимо создать таблицу-ассоциацию book_author
, которая будет содержать ключи обеих сущностей. В классе Book
нужно использовать аннотацию @ManyToMany
, указать имя таблицы-ассоциации и поле, которое будет использоваться в качестве ключа связи. Аналогично, в классе Author
нужно использовать аннотацию @ManyToMany
, указать имя таблицы-ассоциации и поле, которое будет использоваться в качестве ключа связи.
@cierra
Маппинг Many-to-Many в Hibernate позволяет установить отношение между двумя сущностями, которое подразумевает, что каждая сущность может ссылаются на множество экземпляров другой сущности. Для этого, как правило, используется дополнительная таблица-связь, которая содержит в себе ключи обеих сущностей и устанавливает связь между ними.
Например, предположим у нас есть сущности "Книга" и "Автор" и существует множество книг, которые могут быть написаны различными авторами (и наоборот, один автор может иметь несколько книг). Для реализации многие-ко-многим взаимосвязи между этими сущностями в Hibernate, мы создадим таблицу-ассоциацию "book_author", которая будет содержать ключи обеих сущностей. Каждый раз, когда у нас есть экземпляр "Книги" и мы хотим установить связь с одним или несколькими авторами, или наоборот, у нас есть экземпляр "Автора" и мы хотим установить связь с одной или несколькими книгами, мы будем использовать таблицу-ассоциацию "book_author" для хранения таких связей.
На уровне кода классов в Hibernate, это будет выглядеть примерно следующим образом:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
@Entity @Table(name = "book") public class Book { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String title; @ManyToMany @JoinTable(name = "book_author", joinColumns = @JoinColumn(name = "book_id"), inverseJoinColumns = @JoinColumn(name = "author_id")) private Set<Author> authors = new HashSet<>(); // геттеры и сеттеры } @Entity @Table(name = "author") public class Author { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String name; @ManyToMany(mappedBy = "authors") private Set<Book> books = new HashSet<>(); // геттеры и сеттеры } |
В данном примере, у нас есть классы Book и Author, которые устанавливают Many-to-Many отношение между ними через таблицу-ассоциацию "book_author". При этом, в классе Book мы указываем, что у нас есть множество авторов, а в классе Author мы указываем, что у нас есть множество книг. Все связи между этими классами будут храниться и управляться через таблицу-ассоциацию.