休眠 OneToMany 和 ManyToOne?
Posted
技术标签:
【中文标题】休眠 OneToMany 和 ManyToOne?【英文标题】:Hibernate OneToMany and ManyToOne? 【发布时间】:2013-07-25 02:56:29 【问题描述】:在 Hibernate 中,您可以分别通过 @OneToMany
或 @ManyToOne
注释指定一对多或反向多对一。但是在我看到的示例中,每次将 A 与 B 关联时,您也需要将 B 与 A 关联。例如,如果 Teacher
与 Course
具有一对多关系(一个老师可以教很多课程),我是否需要:
teacher.getCourses().add(mathCourse);
teacher.getCourses().add(historyCourse);
还有:
mathCourse.setTeacher(teacher);
historyCourse.setTeacher(teacher);
或者仅将它们单向关联就足够了(从而允许您选择上述一组关系)?换句话说,我可以通过以下方式将它们联系起来吗:
teacher.getCourses().add(mathCourse);
teacher.getCourses().add(historyCourse);
为什么/为什么不?提前致谢!
【问题讨论】:
例如,只要mathCourse
是一个持久化的实体,你只需要在关系的一侧添加即可。此外,您不一定需要双向关系。
【参考方案1】:
在这种情况下,您只能添加单向关系。请参阅下面的示例
@Entity
@Table(name = "contact")
public class Contact implements Serializable
@ManyToOne
@JoinColumn(name = "companyId")
private Company company;
...
@Entity
@Table(name = "company")
public class Company implements Serializable
@ManyToOne
@JoinColumn(name = "statusId")
private CompanyStatus status;
...
【讨论】:
谢谢@vicky (+1) - 你能在这里帮助解释单向和双向关系之间的区别吗?两者都有什么好处,两者如何影响基础表结构?再次感谢! 双向关系提供双向导航访问,因此您无需显式查询即可访问另一侧。它还允许您将级联选项应用于两个方向。请检查这个,[链接]powerdream5.wordpress.com/2007/10/18/…以上是关于休眠 OneToMany 和 ManyToOne?的主要内容,如果未能解决你的问题,请参考以下文章
如何正确映射@OneToMany 和@ManyToOne 关系,以便我可以保存和更新@OneToMany 端(有或没有@ManyToOne 端)