1:主外键:两表关联
<!-- 利用一对多关系加载ras属性值 -->
<set name="ras">
<!--指定关联外键字段,
将来拿外键与当前主键对等-->
<key column="user_id"/>
<one-to-many class="ReceiveAddress"/>
</set>
<!-- 利用多对一关联加载相关user信息 -->
<!--
<property name="userId" type="integer">
<column name="user_id"></column>
</property>
-->变为
<many-to-one name="user"
class="User" column="user_id">
</many-to-one>
2:多对多:d_category_product为中间表
<!-- 利用多对多关系加载pros集合 -->
<set name="pros" order-by="id"
table="d_category_product">
<key column="cat_id"></key>
<many-to-many column="product_id"
class="com.tarena.pojo.Product">
</many-to-many>
</set>
<!-- 利用多对多加载cats集合 -->
<set name="cats"
table="d_category_product">
<key column="product_id"></key>
<many-to-many column="cat_id"
class="com.tarena.pojo.Category">
</many-to-many>
</set>
3.继承关系映射
*1)父类和子类都有对应的表,使用<joined-subclass>定义继承关系,使用步骤如下
a.将父表和子表生成单表的基本映射
b.将子类添加extends父类
c.利用<joined-subclass>定义子类映射
从Hibernate3.0版本开始,可以将<joined-subclass>单独取出,放到一个hbm.xml中定义.格式如下
<hibernate-mapping>
<joined-subclass name="子类类型"
extends="父类类型"
table="子类表">
<key column="子类表关联字段"/>
//property字段映射
</joined-subclass>
</hibernate-mapping>
Hibernate3.0版本之前,需要下面格式
<hibernate-mapping>
<class name="父类类型" table="父类表">
//id主键映射
//父类property映射
<joined-subclass name="子类类型"
extends="父类类型"
table="子类表">
<key column="子类表关联字段"/>
//property字段映射
</joined-subclass>
</class>
</hibernate-mapping>
*2)父类和子类使用同一张数据表
选择题:
编号,题目,难度,选项,选择答案
简答题:
编号,题目,难度,简答答案
数据表Question
编号,题目,难度,选项,选择答案,简答答案,题目类型
使用<subclass>定义子类映射,具体步骤:
a.修改实体类,定义成父类和子类的结构
b.在映射文件中定义映射
<hibernate-mapping>
<class name="父类型" table="数据表">
//定义父类中属性的映射
<discriminator column="区分字段"/>
<subclass name="子类1"
discriminator-value="区分值">
//定义子类1中属性的映射
</subclass>
<subclass name="子类2"
discriminator-value="区分值">
//定义子类2中属性的映射
</subclass>
</class>
<hibernate-mapping>
4.其他映射
*1).组件映射
目的:代码重复利用组件,减少冗余性.
<class>
//...主键和属性映射
<component name="组件属性名" class="组件类型">
//组件子属性的映射property
</component>
</class>
*2).联合主键映射
目的:两个或两个以上字段充当主键
<class>
<composite-id id="主属性名" class="类型">
<key-property name="子属性1" type=""
column="主键字段1">
</key-property>
<key-property name="子属性2" type=""
column="主键字段2">
</key-property>
</composite-id>
//其他普通属性和字段映射
</class>