有人能解释一下在xml映射文件中反向的用法吗?我正在读教程,但没能理解它在映射文件中的用法?
谢谢
发布于 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)肯定会更新外键并实际建立关系。
我认为同样的概念也会带到多对多的关系中。
发布于 2010-12-14 22:18:19
如果一个集合被标记为“逆向”,那么Hibernate将不会执行任何SQL来维护数据库中的集合。
例如,一对多的集合通常(在我的经验中,实际上总是)被标记为反向的:“许多”实体(集合的成员)有一个带有父实体ID的列(映射为多对一属性),简单地创建其中一个实体就意味着它将被隐式地包括在集合中,因此不需要显式地更新它们。
如果使用多对多集合(当然通常是成对出现的),则需要将其中一个集合标记为“逆向”,否则Hibernate将尝试创建两次表示该集合的连接表条目。
发布于 2010-12-14 21:50:27
在多对多关系中,您遵循联接的方向。
让我们举个例子:
一个学生可以学习一门或多门课程,因此我们在学生和课程之间有一个连接表,名为StudentCourse(IdStudent,IdCourse)。
反向属性需要放在课程的一半上,因为它将指示Hibernate (它不太了解StudentCourse表)正确地构建其查询。
如果您在学生半部分上将反向属性设置为true,Hibernate将认为联合表为CourseStudent(IdCourse,IdStudent) !!
对于一对多关系也是如此。
https://stackoverflow.com/questions/4439756
复制相似问题