类中的每个主键属性都对应到数据库表中的每个主键列。
Hibernate要求具有联合主键的实体类实现serializable接口,
并且重写hashCode与equals方法,重写这两个方法的原因
在于Hibernate要根据数据库的联合主键来判断某两行记录
是否是一样的,如果一样那么就认为是同一个对象,如果不
一样,那么就认为是不同的对象。这反映到程序领域中就是
根据hashCode和equals方法来判断某两个对象是否能够放
到诸如Set这样的集合当中。
我们可以提取复合主键中的属性到一个类中,称这样的
类为复合主键类,但该类同样需要实现serializable接口,并
且重写hashCode与equals方法,并且在相应的hbm配置文件
中设置composite-id元素中的name属性,class类型即为主键
类,如下所示:
<composite-id name="studentPrimaryKey" class="com.panlei.hibernate.StudentPrimaryKey">
<key-property name="name" type="string"></key-property>
<key-property name="cardId" type="string"></key-property>
</composite-id>
需要实现serializable接口的原因在于查询含有复合主键的对象
时,可以通过session的get方法获取需要查询的对象,而传入
的参数为serializable类型的,因此我们需要实现serializable接
口。
本文讲解了在Hibernate框架中如何处理复合主键,包括实现Serializable接口及重写hashCode与equals方法的原因,还介绍了如何通过复合主键类进行数据库操作。

1万+

被折叠的 条评论
为什么被折叠?



