对于新系统的设计开发而言,我们应该尽量避免在哭表中引入与业务逻辑相关的主键关系。
将业务逻辑主键引入库表,将使得底层库表结构与业务逻辑相耦合,之后业务逻辑的变化,将很可能对底层数据库结构产生连带影响。
复合主键的引入,很大程度上意味着业务逻辑已经侵入到数据存储逻辑之中。因此在新系统的设计过程中,我们应该尽量避免这样的情况出现。
Hibernate中,通过composite-id节点对复合主键进行定义。
对于复合主键而言,我们可以通过2种方式确定主键:
1>基于实体类属性的复合主键
复合主键由实体类中的属性组成,此时,实体类本身即同事扮演复合主键类的角色。
<hibernate-mapping>
<class name="com.wyq.hibernate.TUser2" table="T_User2">
<composite-id>
<key-property name="lastname" column="lastname" type="string"/>
<key-property name="firstname" column="firstname" type="string"/>
</composite-id>
<property name="age" column="age" type="integer">
</property>
</class>
</hibernate-mapping>
Hibernate要求复合主键类实现equals和hashcode方法,以作为不同数据之间识别的标志。
主键类的加载:我们可以将TUser2类对象本身作为查询条件进行检索:
2>基于主键类的复合主键
我们可以将主键属性独立到一个单独的类中。实现方法类似,只不过映射文件的composite-id节点要引入class和name属性。
posted on 2009-10-27 22:30
王永庆 阅读(142)
评论(0) 编辑 收藏 所属分类:
HIBERNATE