读书人

Hibernate 联结主键

发布时间: 2012-08-30 09:55:54 作者: rapoo

Hibernate 联合主键

为什么要使用联合主键 ,自从项目上有需求之后才真正明白,现在把自己的使用心得写下来供以后查阅;

简单说下项目上的要求,现在用户登录系统之后要进行备注信息的填写,既然可以添加备注当然也就可以修改,那么,现在的情况就是设计成联合主键的形式:

部分代码参考如下:

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的添加或更新操作,而不用使用原先只有一个主键时要先查询出

主键,再根据主键去更新数据,方便了再去查询的一步!

读书人网 >编程

热点推荐