<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    輕松

    記述我學習java的里程

    常用鏈接

    統計

    積分與排名

    友情鏈接

    最新評論

    hibernate注解方式實現復合主鍵

    有時一個實體的主鍵可能同時為多個,例如同樣是之前使用的“CustomerEO”實體,需要通過name和email來查找指定實體,當且僅當name和email的值完全相同時,才認為是相同的實體對象。要配置這樣的復合主鍵,步驟如以下所示。

    (1)編寫一個復合主鍵的類CustomerPK,代碼如下。

    CustomerPK.java

    import java.io.Serializable;

     

    public class CustomerPK implements Serializable {

     

             public CustomerPK() {

     

             }

     

             public CustomerPK(String name, String email) {

                       this.name = name;

                       this.email = email;

             }

     

             private String email;

     

             public String getEmail() {

                       return email;

             }

     

             public void setEmail(String email) {

                       this.email = email;

             }

     

             private String name;

     

             public String getName() {

                       return name;

             }

     

             public void setName(String name) {

                       this.name = name;

             }

     

             @Override

             public int hashCode() {

                       final int PRIME = 31;

                       int result = 1;

                       result = PRIME * result + ((email == null) ? 0 : email.hashCode());

                       result = PRIME * result + ((name == null) ? 0 : name.hashCode());

                       return result;

             }

     

             @Override

             public boolean equals(Object obj) {

                       if (this == obj)

                                return true;

                       if (obj == null)

                                return false;

                       if (getClass() != obj.getClass())

                                return false;

                       final CustomerPK other = (CustomerPK) obj;

                       if (email == null) {

                                if (other.email != null)

                                         return false;

                       } else if (!email.equals(other.email))

                                return false;

                       if (name == null) {

                                if (other.name != null)

                                         return false;

                       } else if (!name.equals(other.name))

                                return false;

                       return true;

             }

     

    }

    作為符合主鍵類,要滿足以下幾點要求。

    l         必須實現Serializable接口。

    l         必須有默認的public無參數的構造方法。

    l         必須覆蓋equals和hashCode方法。equals方法用于判斷兩個對象是否相同,EntityManger通過find方法來查找Entity時,是根據equals的返回值來判斷的。本例中,只有對象的name和email值完全相同時或同一個對象時則返回true,否則返回false。hashCode方法返回當前對象的哈希碼,生成的hashCode相同的概率越小越好,算法可以進行優化。

    (2)通過@IdClass注釋在實體中標注復合主鍵,實體代碼如下。

    @Entity

    @Table(name = "customer")

    @IdClass(CustomerPK.class)

    public class CustomerEO implements java.io.Serializable {

     

             private Integer id;

     

             public Integer getId() {

                       return this.id;

             }

     

             public void setId(Integer id) {

                       this.id = id;

             }

            

             private String name;

     

    @Id

             public String getName() {

                       return this.name;

             }

     

             public void setName(String name) {

                       this.name = name;

             }

            

             private String email;

    @Id

             public String getEmail() {

                       return email;

             }

     

             public void setEmail(String email) {

                       this.email = email;

             }

    }

    標注復合主鍵時需要注意以下幾個問題。

    l         @IdClass標注用于標注實體所使用主鍵規則的類。它的定義如下所示。

    @Target({TYPE}) @Retention(RUNTIME)

    public @interface IdClass {

    Class value();

    }

    屬性Class表示符合主鍵所使用的類,本例中使用CustomerPK這個復合主鍵類。

    l         在實體中同時標注主鍵的屬性。本例中在email和name的getter方法前標注@Id,表示符合主鍵使用這兩個屬性。

    (3)這樣定義實體的復合主鍵后,通過以下代碼便可以獲得指定的實體對象:

        CustomerPK cpk = new CustomerPK("Janet","janetvsfei@yahoo.com.cn");

        CustomerEO instance = entityManager.find(CustomerEO.class, cpk);

     

    本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/EJB_JPA/archive/2008/05/09/2422540.aspx

    posted on 2009-09-18 16:29 輕松 閱讀(10365) 評論(1)  編輯  收藏 所屬分類: Hibernate

    評論

    # re: hibernate注解方式實現復合主鍵 2009-09-18 19:33 nonono

    已閱,受用了  回復  更多評論   

    主站蜘蛛池模板: 国产亚洲福利精品一区| 亚洲一区二区三区四区在线观看| 看免费毛片天天看| 亚洲人成伊人成综合网久久久 | 亚洲乱色伦图片区小说| 亚洲精品一级无码中文字幕| 免费国产在线视频| 亚洲一级免费毛片| 亚洲av无码成人精品区在线播放| 黄网站色视频免费在线观看的a站最新| 亚洲美女视频免费| 成年在线网站免费观看无广告| 国产免费牲交视频免费播放 | 日本激情猛烈在线看免费观看| 亚洲av无码片在线播放| 一二三四免费观看在线视频中文版| 亚洲免费在线观看| 亚洲youjizz| 国产亚洲情侣一区二区无码AV | 亚洲国产天堂久久综合| 91免费国产自产地址入| 日本激情猛烈在线看免费观看| 亚洲国产精品成人综合久久久| 亚洲精品国产福利一二区| 午夜福利不卡片在线播放免费| 日韩一级片免费观看| 亚洲an日韩专区在线| 国产亚洲真人做受在线观看| 国产免费啪嗒啪嗒视频看看| 免费不卡在线观看AV| 久香草视频在线观看免费| 亚洲一卡2卡3卡4卡乱码 在线| 亚洲国产精品无码久久一区二区| 国产精品二区三区免费播放心| 99免费在线观看视频| www.xxxx.com日本免费| 亚洲国产成人久久综合| 亚洲人成片在线观看| 亚洲激情在线视频| 亚洲色欲久久久综合网东京热| 国产jizzjizz免费看jizz|