Какие виды ассоциаций поддерживает Hibernate?
Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
Ассоциации в Hibernate
Ассоциация — это связь между двумя сущностями в базе данных. Hibernate поддерживает четыре основных вида ассоциаций, которые определяют кардинальность связи между объектами.
1. One-to-One (Один-к-одному)
Это отношение, где каждой записи в одной таблице соответствует ровно одна запись в другой таблице.
@Entity
public class Person {
@Id
private Long id;
private String name;
@OneToOne
@JoinColumn(name = "passport_id")
private Passport passport;
}
@Entity
public class Passport {
@Id
private Long id;
private String number;
}
В этом примере каждый человек имеет один паспорт, и каждый паспорт принадлежит одному человеку.
2. One-to-Many (Один-к-многим)
Это наиболее распространённое отношение, где одна запись в главной таблице связана с несколькими записями в зависимой таблице.
@Entity
public class Author {
@Id
private Long id;
private String name;
@OneToMany(mappedBy = "author", cascade = CascadeType.ALL)
private List<Book> books = new ArrayList<>();
}
@Entity
public class Book {
@Id
private Long id;
private String title;
@ManyToOne
@JoinColumn(name = "author_id")
private Author author;
}
Анотация mappedBy = "author" указывает, что сторона Book содержит обратную ссылку. CascadeType.ALL обеспечивает каскадное удаление книг при удалении автора.
3. Many-to-One (Многие-к-одному)
Это обратная сторона One-to-Many отношения. Многие записи в одной таблице ссылаются на одну запись в другой таблице.
@Entity
public class Department {
@Id
private Long id;
private String name;
}
@Entity
public class Employee {
@Id
private Long id;
private String name;
@ManyToOne
@JoinColumn(name = "department_id")
private Department department;
}
Много сотрудников могут работать в одном отделе.
4. Many-to-Many (Многие-ко-многим)
Это отношение, где записи с обеих сторон могут быть связаны с несколькими записями другой стороны. Требуется промежуточная таблица.
@Entity
public class Student {
@Id
private Long id;
private String name;
@ManyToMany
@JoinTable(
name = "student_course",
joinColumns = @JoinColumn(name = "student_id"),
inverseJoinColumns = @JoinColumn(name = "course_id")
)
private List<Course> courses = new ArrayList<>();
}
@Entity
public class Course {
@Id
private Long id;
private String title;
@ManyToMany(mappedBy = "courses")
private List<Student> students = new ArrayList<>();
}
Аннотация @JoinTable определяет промежуточную таблицу со связями на обе стороны.
Направление ассоциации
Ассоциации могут быть:
- Однонаправленные — только одна сторона знает о связи
- Двунаправленные — обе стороны могут навигировать по связи
Важные параметры
cascade— определяет, как операции (сохранение, удаление) распространяются на связанные объектыfetch = FetchType.LAZY— отложенная загрузка (по умолчанию для многих)fetch = FetchType.EAGER— немедленная загрузкаorphanRemoval = true— удаление потерявшихся связанных объектов
Эти четыре вида ассоциаций позволяют моделировать любые сложные отношения между сущностями в вашем приложении.