为啥要在hibernate中使用关联?

Posted

技术标签:

【中文标题】为啥要在hibernate中使用关联?【英文标题】:Why to use association in hibernate?为什么要在hibernate中使用关联? 【发布时间】:2013-10-02 08:40:09 【问题描述】:

我已经做了很多谷歌搜索,但我仍然不明白为什么要在休眠中使用关联? 我设法在不提及一对多或任何其他关联的情况下做事。 我总是可以使用某些连接条件对表进行笛卡尔积,而无需显式使用休眠连接。 如果我不使用它们,我会错过什么? 如果有的话,请说出它们的优点或缺点。 谢谢。

【问题讨论】:

【参考方案1】:

Hibernate 中关联的主要优点是它们允许您通过源代码轻松访问/持久化childparent 实体。例如,如果我有以下内容:

@Entity
public class Student

   @OneToMany
   private List<Course> courses = new ArrayList<Course>();

   //Accessors

在我的代码中,我可以使用关联来获取学生的所有课程,例如:

Student student = studentRepo.findById(1, Student.class);
List<Course> courses = student.getCourses();

这就是遍历这个父子关系所必需的。不需要额外的 SQL 或连接。您还可以轻松地执行其他 crud 操作,例如插入和删除。

顺便说一句您在原始问题中提到笛卡尔连接,这些应该是例外而不是常态。它们可能会带来巨大的性能开销,并且通常可以使用不同的连接更有效地完成。

【讨论】:

感谢您的回复。每个人都说性能更好。请告诉我如何/为什么? & 如果一个查询(带有子查询)在 mysql(通过分析检查)中运行得快(比在整个表上进行连接的查询)在 Hibernate 中也运行得快。

以上是关于为啥要在hibernate中使用关联?的主要内容,如果未能解决你的问题,请参考以下文章

Hibernate:为啥 FetchType.LAZY 注释的集合属性急切地加载?

hibernate映射postgreSQL数据库中的表时,表名是大写的时候为啥hibernate不能映射实体

Hibernate:n-n关联关系

为啥 Spring 在使用 Hibernate 3 时推迟关闭 Hibernate 会话

hibernate 一对多双向关联 外键值为空 怎么结决?

码农小汪-Hibernate学习8-hibernate关联关系注解表示@OneToMany mappedBy @ManyToMany @JoinTable