一、用到复合主键时,hibernate处理复合主键映射是基于这样一种做法:把目标类中所有主键关联属性抽出来,单独写成一个类(暂且叫它主键类),目标类就只需持有主键类对象,而不必再包含各个主键属性;在映射文件中使用<composite-id>标签来配置主键对象并指出关联属性,普通属性照常配置;hibernate只会创建一张表在,并且把主键设置为主键类各属性的联合主键,存储和加载数据时,会自然的把关联对象各属性跟表中的主键字段对应起来。
在网上找到的资料都是将主键关联属性抽出来,单独写成一个类。
经过实验,我们可以更简单的使用:
实体类:
public class WapSort implements Serializable{
/**
*
*/
private static final long serialVersionUID = 1L;
private WapSort wapSort; //自身定义为属性
private String sortName;
private Date createTime;
public WapSort getWapSort() {
return wapSort;
}
public void setWapSort(WapSort wapSort) {
this.wapSort = wapSort;
}
public String getSortName() {
return sortName;
}
........
配置文件写法一:
<hibernate-mapping>
<class name="com.pojo.WapSort" table="WAP_SORT" schema="*****">
<composite-id name="wapSort" class="com.pojo.WapSort">
<key-property name="sortName" type="java.lang.String">
<column name="SORT_NAME" precision="8" scale="0" />
</key-property>
<key-property name="createTime" type="java.lang.String">
<column name="CREATE_TIME" precision="8" scale="0" />
</key-property>
</composite-id>
</class>
</hibernate-mapping>
配置文件写法二:
<hibernate-mapping>
<class name="com.pojo.WapSort" table="WAP_SORT" schema="*****">
<composite-id name="wapSort" class="com.pojo.WapSort">
<key-property name="sortName" type="java.lang.String">
<column name="SORT_NAME" precision="8" scale="0" />
</key-property>
</composite-id>
<property name="createTime" type="java.util.Date">
<column name="CREATE_TIME" precision="8" scale="0"></column>
</property>
</class>
</hibernate-mapping>
这样我们可以将某些属性联合做成复合主键,或将整个实体类做成复合主键, 一个实体类,一个配置文件搞定复合主键!
复合主键实体类必须 实现 Serializable 接口,而hashCode方法与equals方法在实验中没有重写,貌似也没有问题!