Hibernate聯合主鍵

來源:互聯網
上載者:User

 

複合(聯合)主鍵映射的時候,通常將複合主鍵相關的屬性,單獨放到一個類中,那麼需要滿足以下條件

①此類必須實現序列化介面 implements java.io.Serializable

②覆寫hashcode和equals方法

 

類:

import java.io.Serializable;

// 主鍵類

public class NamePK implements Serializable{

private static final long serialVersionUID = 8313037022835155821L;

private String firstName;
private String lastName;

public String getFirstName() {
   return firstName;
}
public void setFirstName(String firstName) {
   this.firstName = firstName;
}
public String getLastName() {
   return lastName;
}
public void setLastName(String lastName) {
   this.lastName = lastName;
}

// hashcode和equals方法交給交給eclipse自己來寫,source/generator hashCode() and equals()
public int hashCode() {
   final int PRIME = 31;
   int result = 1;
   result = PRIME * result + ((firstName == null) ? 0 : firstName.hashCode());
   result = PRIME * result + ((lastName == null) ? 0 : lastName.hashCode());
   return result;
}

 

public boolean equals(Object obj) {
   if (this == obj)
    return true;
   if (obj == null)
    return false;
   if (getClass() != obj.getClass())
    return false;
   final NamePK other = (NamePK) obj;
   if (firstName == null) {
    if (other.firstName != null)
     return false;
   } else if (!firstName.equals(other.firstName))
    return false;
   if (lastName == null) {
    if (other.lastName != null)
     return false;
   } else if (!lastName.equals(other.lastName))
    return false;
   return true;
}

}

 

// 實體類

public class UserInfo {
private NamePK namePk;
private String sex;
private int age;

}

 

 

hbm.xml

UserInfo.hbm.xml

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.zd.model">
    <class name="UserInfo" table="user_info" >
        <composite-id name="namePk">
            <key-property name="firstName" column="first_name" length="12"/>
            <key-property name="lastName" column="last_name" length="12"/>
        </composite-id>
        <property name="sex" length="12"/>
        <property name="age" />
    </class>

</hibernate-mapping>

 

 

測試案例:

public void testCompositeId(){
   Session session = null;
   Transaction ta = null;
   try{
      session = HibernateUtil.getSession();
      ta = session.beginTransaction();
      NamePK namePk = new NamePK();
      namePk.setFirstName("Zhang");
      namePk.setLastName("san");
      UserInfo ui = new UserInfo();
      ui.setNamePk(namePk);
      ui.setSex("M");
      ui.setAge(12);
      session.save(ui);
      ta.commit();
   }catch(Exception e){
    e.printStackTrace();
    if(ta != null){
     ta.rollback();
    }
   }finally{
    //關閉session,user變為detached離線對象
    HibernateUtil.closeSession(session);
   }
 
}

 

public void testgetId(){
   Session session = null;
   Transaction ta = null;
   try{
      session = HibernateUtil.getSession();
      ta = session.beginTransaction();
      NamePK namePk = new NamePK();
      namePk.setFirstName("Zhang");
      namePk.setLastName("san");

      //get or load均是要序列化的類,所以要把主鍵implements Serializable
      UserInfo ui = (UserInfo) session.get(UserInfo.class, namePk);        

      System.out.println(ui.getAge());
      System.out.println(ui.getSex());
      ta.commit();
   }catch(Exception e){
      e.printStackTrace();
      if(ta != null){
         ta.rollback();
      }
   }finally{
     //關閉session,user變為detached離線對象
     HibernateUtil.closeSession(session);
   }
}

 

 

原帖地址:http://hi.baidu.com/fytcm/blog/item/5124737b38ea56fe0bd187fa.html

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.