Hibernate学习21 -- 关联映射11 -- 复合主键映射(composite-id)

41 篇文章 0 订阅

通常将复合主键相关的属性,单独放到一个类中

    * 此类必须实现序列化接口

    * 覆写hashcodeequals方法

如果在表中有两个列合起来当主键怎么处理?强烈不建议使用这种方式。

l         编写一个类(实现序列化接口),封装主键,并写属性。例如:

public class CustomerPK implements Serializable{//主键类

              private String account;

              private String password;

              public String getAccount() {

                     return account;

              }

              public void setAccount(String account) {

                     this.account = account;

              }

              public String getPassword() {

                     return password;

              }

              public void setPassword(String password) {

                     this.password = password;

              }

}

l         Po内编写各个属性,包括主键类型。例如:

public class Customer{

       private CustomerPK cpk;//主键类

       private String cname;

       private double cbalance;

       public Customer(){}     

       public double getCbalance() {

              return cbalance;

       }

       public void setCbalance(double cbalance) {

              this.cbalance = cbalance;

       }

       public String getCname() {

              return cname;

       }

       public void setCname(String cname) {

              this.cname = cname;

       }

       public CustomerPK getCpk() {

              return cpk;

       }

       public void setCpk(CustomerPK cpk) {

              this.cpk = cpk;

       }    

}

l         在映射文件中申明复合主键。例如:

<?xml version="1.0"?>

<!DOCTYPE hibernate-mapping PUBLIC

    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"

    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<hibernate-mapping>

       <class name="po.Customer" table="T_CUSTOMER">      

      

              <composite-id name="cpk" class="po.CustomerPK">  <!-- 复合主键 -->

                     <key-property name="account" column="ACCOUNT">

</key-property>

                     <key-property  name="password"  column="PASSWORD">

</key-property>

              </composite-id>

             

              <property name="cname"      column="CNAME"/>    

              <property name="cbalance"   column="CBALANCE"/>             

       </class>

</hibernate-mapping>

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值