假設我們有兩個物體,EntityA 和 EntityB,這些物體是雙向的。我們應該如何獲取entityB?向存盤庫添加新方法(如 findAllByEntityA() 或我們可以使用 getEntitiesA() getter 是否有意義?
uj5u.com熱心網友回復:
您可以添加一個新的 spring 存盤庫方法,或者簡單地使用@Getter注釋,或者實作您自己的 getter 方法。
findAllByEntityA()如果您希望回傳 List<EntityB> ,則可以將其作為獲取 EntityB 的一種方式。另一方面,我希望基于命名約定,getEntitiesA()用于獲取 List<EntityA> 而不是用于 B 的。
這真的取決于你的雙向關系,但是,基本上所有的 jpa 一對一、一對多、多對一、多對多映射都簡單地歸結為外鍵約束。
uj5u.com熱心網友回復:
正如渦輪食品已經說過的那樣。有不同型別的映射:
- 一對一映射。就像一個司機和一輛車:一輛車只能由一個司機駕駛,一個司機只能駕駛一輛車。
- 多對一映射:就像父親和孩子一樣,一個父親可以有多個孩子,但一個孩子只能有一個父親。
- 多對多映射:就像學生和老師一樣。一個學生可以有多個老師,一個老師可以有多個學生。
對于一對一映射和多對一映射,您只有一個外鍵。但是對于多對多映射,您有兩個外鍵,它們是 db-relation-table 的一部分(不能有 jpa-entity)。
使用 JPA/Hibernate,我們將關系之間的端點區分為兩種:擁有方(getter 和 setter)和非擁有方(getter 和 setter)。
對于多對多關系,這是擁有方:
@OrderBy
@ManyToMany
@JoinTable(name="`STUDENT_TO_TEACHER`", joinColumns = {
@JoinColumn(name="`student_id`", referencedColumnName="`id`", nullable=false),
}, inverseJoinColumns = {
@JoinColumn(name="`teacher_id`", referencedColumnName="`id`", nullable=false)
})
public Set<Student> getStudents() {
return this.students;
}
而非擁有方:
@ManyToMany(mappedBy="students")
public Set<Teacher> getTeachers() {
return teachers;
}
現在為什么擁有方和非擁有方很重要:
Student student = ...
Teacher teacher = ...
// a bad example:
student.getTeachers().add(teacher); // STUDENT.TEACHERS IS NOT THE OWNING SIDE
entityManager.persist(student); // THIS IS NOT POSSIBLE!
// a good example
teacher.getStudents().add(student); // good
entityManager.persist(teacher); // possible, teacher have a new student.
除了 Map<> 關聯的 1-1/nm/1-n 邊之外,還有另一種罕見的映射情況。Map<> 關聯讓您可以在休眠中使用地圖作為吸氣劑。我從未使用過它,所以我無法詳細說明這方面的經驗。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/402196.html
上一篇:無法將物體保存到資料庫
下一篇:如何使用js更改svg屬性?
