为什么要使用联合主键 ,自从项目上有需求之后才真正明白,现在把自己的使用心得写下来供以后查阅;
简单说下项目上的要求,现在用户登录系统之后要进行备注信息的填写,既然可以添加备注当然也就可以修改,那么,现在的情况就是设计成联合主键的形式:
部分代码参考如下:
CREATE TABLE
XXX
(
……
PRIMARY KEY (ORG_ID, RPT_YEAR, RPT_QUARTER) ----设置联合主键
)
Hibernate 相关的配置文件如下:
<class name="xxx" table="D_REMARK">
<composite-id name="moniRemark_ID" class="xxx.model.MoniRemark_ID"> ----联合主键配置
<key-property name="orgId" type="java.lang.String">
<column name="org_id" length="10" />
</key-property>
<key-property name="rptYear" type="java.lang.Integer">
<column name="rpt_year" />
</key-property>
<key-property name="rptQuarter" type="java.lang.Integer">
<column name="rpt_quarter" />
</key-property>
</composite-id>
<property name="remark" column="remark" type="java.lang.String" length="500" not-null="false"/>
</class>
既然配置的联合主键,那么相应的hbm.xml配置文件所对应的model类中也不能简单的用数据库中字段,
而是应该使用联合主键,如上,在类中要这样定义:
public class xxxxModel implements Serializable { -----要实现Serializable接口
private MoniRemark_ID moniRemark_ID = new MoniRemark_ID(); --- 定义一个类专门用来存储数据库中那三个联合主键
private String remark = "";
……省略get 、set 方法
工具类定义:
public class MoniRemark_ID implements Serializable {
private String orgId = "";
private int rptYear = 0;
private int rptQuarter = 0;
…… 省略get 、set 方法
所有类定义好后,hbm.xml文件添加到hibernate配置文件中之后,就可使用该model了:
如执行该model所对应dao方法中的saveorupdate方法,执行这个model的添加或更新操作,而不用使用原先只有一个主键时要先查询出
主键,再根据主键去更新数据,方便了再去查询的一步!