簡易代碼之家

            BlogJava :: 首頁 :: 聯系 :: 聚合  :: 管理
            157 Posts :: 2 Stories :: 57 Comments :: 0 Trackbacks
              當我們需要使用一個或多個屬性變量(表中的一列或多列)聯合起來作為主鍵,我們需要使用復合主鍵。在EJB3.0中復合主鍵要求我們編寫一個復合主鍵類( Composite Primary Key Class )。下面是個小例子,在Student中要用sid和name做復合主鍵。
          Student實體類:
           1 import javax.persistence.Column;
           2 import javax.persistence.Entity;
           3 import javax.persistence.Id;
           4 import javax.persistence.IdClass;
           5 
           6 @Entity
           7 @IdClass(StudentPK.class)
           8 public class Student {
           9     
          10     private String sid;
          11     private String name;
          12     private String age;
          13 
          14     @Id
          15     public String getSid() {
          16         return sid;
          17     }
          18     public void setSid(String sid) {
          19         this.sid = sid;
          20     }
          21     
          22     @Id
          23     public String getName() {
          24         return name;
          25     }
          26     public void setName(String name) {
          27         this.name = name;
          28     }
          29     
          30     @Column
          31     public String getAge() {
          32         return age;
          33     }
          34     public void setAge(String age) {
          35         this.age = age;
          36     }
          37 
          38 }
          主鍵StudentPK類:
           1 import java.io.Serializable;
           2 
           3 public class StudentPK implements Serializable{
           4     
           5     private static final long serialVersionUID = 1L;
           6     
           7     private String sid;
           8     private String name;
           9     
          10     public StudentPK(){}
          11     public StudentPK(String sid,String name){
          12         this.sid = sid;
          13         this.name = name;
          14     }
          15     
          16     public String getSid() {
          17         return sid;
          18     }
          19     public void setSid(String sid) {
          20         this.sid = sid;
          21     }
          22     public String getName() {
          23         return name;
          24     }
          25     public void setName(String name) {
          26         this.name = name;
          27     }
          28     
          29     @Override
          30     public int hashCode() {
          31         final int prime = 31;
          32         int result = 1;
          33         result = prime * result + ((name == null? 0 : name.hashCode());
          34         result = prime * result + ((sid == null? 0 : sid.hashCode());
          35         return result;
          36     }
          37     
          38     @Override
          39     public boolean equals(Object obj) {
          40         if (this == obj)
          41             return true;
          42         if (obj == null)
          43             return false;
          44         if (getClass() != obj.getClass())
          45             return false;
          46         final StudentPK other = (StudentPK) obj;
          47         if (name == null) {
          48             if (other.name != null)
          49                 return false;
          50         } else if (!name.equals(other.name))
          51             return false;
          52         if (sid == null) {
          53             if (other.sid != null)
          54                 return false;
          55         } else if (!sid.equals(other.sid))
          56             return false;
          57         return true;
          58     }
          59     
          60 }
          主鍵類必需滿足下列條件:
          (1)必需被序列化
          (2)必需有一個公共的無參構造方法
          (3)必需實現equals()和hashCode()方法

          當你查詢Student實體時必須使用主鍵類才能識別實體如:
              StudentPK pk = new StudentPK("bj1001","jakin");
              Student student 
          = entityManager.find(Student.class, pk);
          在測試本例時筆者犯了兩個低級的錯誤,一是測試環境的數據庫不是項目運行的數據庫,二是實體類中的屬性命名用了關鍵字,請引以為戒。
          posted on 2007-12-04 09:29 Jakin.zhou 閱讀(1918) 評論(0)  編輯  收藏

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 弋阳县| 樟树市| 洱源县| 内江市| 洛南县| 集安市| 阜阳市| 建阳市| 徐汇区| 梅河口市| 沂南县| 建始县| 鄂托克前旗| 花莲县| 宝丰县| 托克托县| 成都市| 锡林浩特市| 德格县| 山阴县| 民权县| 北海市| 乃东县| 台南县| 乐亭县| 抚远县| 黑龙江省| 万载县| 长兴县| 福清市| 乌审旗| 两当县| 临洮县| 都匀市| 岑巩县| 开化县| 伊宁县| 横山县| 德安县| 宁蒗| 东明县|