关于属性之间的相互映射(一对多,多对一,多对多)的解决
前提是所有的类和配置文件都在一个包下(一般为domain包)
class Subject{ class Teacher{ class Student{
... ... ...
Teacher tea; Subject sub; Teacher tea;
... Student stu ;
... ...
} } }
1.一对多:(一门学科对应多名教师)
Subject.hbm.xml:
...
<set name = "该文件名所对应类中“多”的属性"(此处即为tea)>
<key column="外键名(一般为属性+Id)" />
<one-to-many class="name中的属性对应的类名(此处即为Teacher)" />
</set>
...
2.多对一:(多名教师对应一门学科)
Teacher.hbm.xml
...
<many-to-one name = "该文件名所对应类中“多”的属性(此处即为sub)" class="name中的属性对应的类名(此处即为Subject)" column="外键名(一般为属性+Id)" />
...
注意:蓝色字的地方的两个名字必须要完全一致。
3.多对多:(多名教师与多名学生对应)(有一点麻烦)
Student.hbm.xml
...
<set name="类Student中所对应的属性(即为tea)" table="中间表(table_tea_stu)">
<key column="外键名(一般为属性+Id)" />
<many-to-many class="类Student中所对应的属性所对应的类(即为Teacher)"
column="外键名(一般为属性+Id)" />
</set>
...
Teacher.hbm.xml
...
<set name="类Teacher中所对应的属性(即为stu)"table="中间表(table_tea_stu)">
<key column="外键名(一般为属性+Id)" />
<many-to-many class="类Techer中所对应的属性所对应的类(即为Student)"
column="外键名(一般为属性+Id)" /></set>
...
在多对多的情况下产生两组外键,两种颜色的外键名要一一对应完全一致才能确保映射成功。