休眠 OneToMany 和 ManyToOne?

Posted

技术标签:

【中文标题】休眠 OneToMany 和 ManyToOne?【英文标题】:Hibernate OneToMany and ManyToOne? 【发布时间】:2013-07-25 02:56:29 【问题描述】:

在 Hibernate 中,您可以分别通过 @OneToMany@ManyToOne 注释指定一对多或反向多对一。但是在我看到的示例中,每次将 A 与 B 关联时,您也需要将 B 与 A 关联。例如,如果 TeacherCourse 具有一对多关系(一个老师可以教很多课程),我是否需要:

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?的主要内容,如果未能解决你的问题,请参考以下文章

JPA @ManyToOne 用于休眠

@OneToMany 映射休眠中的集合

如何正确映射@OneToMany 和@ManyToOne 关系,以便我可以保存和更新@OneToMany 端(有或没有@ManyToOne 端)

JPA、OneToMany 和 ManyToOne

加入表@OneToMany / @ManyToOne

EclipseLink 如何使用两个@OneToMany 和@ManyToOne 来替换@ManyToMany