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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值