Sealyu

          --- 博客已遷移至: http://www.sealyu.com/blog

            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
            618 隨筆 :: 87 文章 :: 225 評論 :: 0 Trackbacks
          <2009年8月>
          2627282930311
          2345678
          9101112131415
          16171819202122
          23242526272829
          303112345

          常用鏈接

          留言簿(14)

          隨筆分類

          隨筆檔案

          友情鏈接

          搜索

          積分與排名

          最新評論

          閱讀排行榜

          評論排行榜

          當我們需要使用一個或多個屬性變量(表中的一列或多列)聯合起來作為主鍵,我們需要使用復合主鍵。在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 2009-08-19 08:23 seal 閱讀(485) 評論(0)  編輯  收藏 所屬分類: Hibernate 、EJB
          主站蜘蛛池模板: 繁峙县| 青阳县| 池州市| 云南省| 西安市| 无锡市| 华安县| 商洛市| 崇明县| 上林县| 通渭县| 拜城县| 内丘县| 莱芜市| 泾阳县| 钟山县| 衡阳县| 德清县| 准格尔旗| 黄冈市| 南城县| 海伦市| 阿拉善盟| 塔城市| 北流市| 于都县| 崇礼县| 灵山县| 保德县| 沾化县| 克什克腾旗| 乌海市| 皋兰县| 霸州市| 安丘市| 漯河市| 梁平县| 封开县| 东方市| 旺苍县| 炎陵县|