首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >映射文件中的Hibernate 'Inverse‘

映射文件中的Hibernate 'Inverse‘
EN

Stack Overflow用户
提问于 2010-12-14 21:41:57
回答 4查看 3.5K关注 0票数 4

有人能解释一下在xml映射文件中反向的用法吗?我正在读教程,但没能理解它在映射文件中的用法?

谢谢

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-12-15 18:29:30

Inverse只决定关系中的哪个实体负责更新数据库以反映关联。

假设是一对多的双向关联。在代码A和B中有两个类,A包含一组B,B维护对A的引用。在数据库级别,只有一个外键需要更新,B的表包含A的主键的列。

在这种情况下,假设我们将反向= true放在set侧。这意味着仅仅将一个实体添加到集合中并不会触发外键更新。因为更新外键的责任在于B。因此,将B对象添加到A维护的集合中不足以更新外键列。objectA.addToSetOfB(objectB)不会影响外键。

只有当B被赋予对A的引用时,B表中的外键才会被更新。因此,objectB.setA(objectA)肯定会更新外键并实际建立关系。

我认为同样的概念也会带到多对多的关系中。

票数 8
EN

Stack Overflow用户

发布于 2010-12-14 22:18:19

如果一个集合被标记为“逆向”,那么Hibernate将不会执行任何SQL来维护数据库中的集合。

例如,一对多的集合通常(在我的经验中,实际上总是)被标记为反向的:“许多”实体(集合的成员)有一个带有父实体ID的列(映射为多对一属性),简单地创建其中一个实体就意味着它将被隐式地包括在集合中,因此不需要显式地更新它们。

如果使用多对多集合(当然通常是成对出现的),则需要将其中一个集合标记为“逆向”,否则Hibernate将尝试创建两次表示该集合的连接表条目。

票数 3
EN

Stack Overflow用户

发布于 2010-12-14 21:50:27

在多对多关系中,您遵循联接的方向。

让我们举个例子:

  • Student(IdStudent,StudentName)
  • Course(IdCourse,CourseName)

一个学生可以学习一门或多门课程,因此我们在学生和课程之间有一个连接表,名为StudentCourse(IdStudent,IdCourse)。

反向属性需要放在课程的一半上,因为它将指示Hibernate (它不太了解StudentCourse表)正确地构建其查询。

如果您在学生半部分上将反向属性设置为true,Hibernate将认为联合表为CourseStudent(IdCourse,IdStudent) !!

对于一对多关系也是如此。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4439756

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档