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

来源:互联网 发布:mac mount ntfs rw 编辑:程序博客网 时间:2024/05/17 22:03

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

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

    * 覆写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>

 

原创粉丝点击