假如说有个班级表:gid ,gname 学生表sid,sname。那么配置文件中该如何配置呢?
一个班级(grad)对应多个学生(student) 这就是一对多,要配置一对多 就要在 一方(grade)的实体类里建一个多方(student)实体集合如private Set students=new HashSet();
简单的列就不说了,直接说重点:
**
一对多
**
在Grade.xml文件里:
<set name="students" table="t_student">
<!--Column 是指定关联的外键列 这里的gid 是Student中gid -->
<key column="gid"></key>
<one-to-many class="包名.Student"/>
</set>
**
多对一
**
同理要在 多方(Student)的实体类 建一个 一方(Grade)的引用 (不是集合) ,private Grade grade;
在Student.xml文件里:
Column 是指定关联的外键列 这里的gid 是Grade中gid
<many-to-one name="grade" class="包名.Grade" column="gid">
</many-to-one>
**
多对多
**
(老师表和学生表)
<hibernate-mapping>
<class name="com.db.Student" table="student" catalog="mydb">
<id name="sid" type="java.lang.Integer">
<column name="sid" />
<generator class="native" />
</id>
<property name="sname" type="java.lang.String">
<column name="sname" length="32" />
</property>
<!-- 通过table属性告诉hibernate中间表,cascade指明级联操作的类型,inverse属性说明Student实体类是主控方,负责维护关系表 -->
<set name="teachers" table="teacher_student" cascade="save-update,delete" inverse="false">
<!--
使用<set>标签映射集合(set),标签中的name值为对象属性名(集合roles)
而使用table属性是用于生成第三方表名称,例:table="user_role"
但是第三方面中的字段是自动加入的,作为外键分别指向其它表。
所以用<key>标签设置,例:<key column="userid"/>
意思是:在第三方表(user_role)中加入一个外键并且指向当前的映射实体类所对应的表(user)
使用<many-to-many>来指定此映射集合所对象的类(实例类)
并且使用column属性加入一个外键指向Role实体类所对应的表(role)
-->
<key>
<column name="sid" not-null="true" />
</key>
<!-- 通过column项告诉hibernate对teacher表中查找tid值相应的teacher记录 -->
<many-to-many class="com.db.Teacher" column="tid"/>
</set>
</class>
</hibernate-mapping>
<hibernate-mapping>
<class name="com.db.Teacher" table="teacher" catalog="mydb">
<id name="tid" type="java.lang.Integer">
<column name="tid" />
<generator class="native" />
</id>
<property name="tname" type="java.lang.String">
<column name="tname" length="32" />
</property>
<!-- 通过table属性告诉hibernate中间表,cascade指明级联操作的类型,inverse属性说明Teacher实体类是被控方,不负责维护关系表 ,不能触发对象和数据库的同步更新的。-->
<set name="students" table="teacher_student" inverse="true"
cascade="save-update,delete">
<key>
<column name="tid" not-null="true" />
</key>
<many-to-many class="com.db.Student" column="sid" />
</set>
</class>
</hibernate-mapping>