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

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

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

    andy-j2ee  
    JAVA
    公告
    • 在夜深人靜的時候,偶彈起心愛的土琵琶,唱起那動人的歌謠(柯受良-《大哥》):偶寫了代碼好多年,偶不愛冰冷的床沿,不要逼偶想念,不要逼偶流淚,偶會翻。
    日歷
    <2011年10月>
    2526272829301
    2345678
    9101112131415
    16171819202122
    23242526272829
    303112345
    統計
    • 隨筆 - 19
    • 文章 - 1
    • 評論 - 1
    • 引用 - 0

    導航

    常用鏈接

    留言簿

    隨筆分類(5)

    隨筆檔案(19)

    文章分類(1)

    文章檔案(1)

    搜索

    •  

    最新評論

    閱讀排行榜

    評論排行榜

     

        

        首先來看一下如何使用JPA標準定義一個Hibernate的POJO對象
     1 package com.anduo.hibernate.model;
     2 
     3 import java.util.Date;
     4 
     5 import javax.persistence.Column;
     6 import javax.persistence.Entity;
     7 import javax.persistence.GeneratedValue;
     8 import javax.persistence.Id;
     9 import javax.persistence.Table;
    10 import javax.persistence.Temporal;
    11 import javax.persistence.TemporalType;
    12 
    13 @Entity
    14 @Table(name="tb_student")
    15 public class Student {
    16     private Long id;
    17     private String name;
    18     private int age;
    19     private Date birthday;
    20 
    21     @Id
    22     @GeneratedValue
    23     @Column(name="s_id")
    24     public Long getId() {
    25         return id;
    26     }
    27 
    28     public void setId(Long id) {
    29         this.id = id;
    30     }
    31     @Column(name="s_name")
    32     public String getName() {
    33         return name;
    34     }
    35 
    36     public void setName(String name) {
    37         this.name = name;
    38     }
    39     
    40     @Column(name="s_age")
    41     public int getAge() {
    42         return age;
    43     }
    44 
    45     public void setAge(int age) {
    46         this.age = age;
    47     }
    48     
    49     @Column(name="s_birthday")
    50     @Temporal(TemporalType.DATE)
    51     public Date getBirthday() {
    52         return birthday;
    53     }
    54 
    55     public void setBirthday(Date birthday) {
    56         this.birthday = birthday;
    57     }
    58 
    59 }
    60 
        可以看到上邊的例子中多了幾個注解(annotation),其實annotation也是像java類一樣的東西,當你寫了一個注解的時候,java編譯器就會調用注解的方法來幫你做一下事情。如Entity就表示這個類是一個實體,table表示在持久化的時候的表的屬性相關聯的東西。接下來就是我們的id生成器了。
        在你需要該列是ID的位置寫上@Id 那么該列在持久化的時候就會生成為主鍵。當然這里的主鍵建議時候包裝類型的如Integer Long
        當然我在這里只復習了annotation的持久化,XML的可以參考曹小剛翻譯的hibernate文檔。
        1        注意:

    a)  我們觀察hibernate生成表的結構并不是為了將來就用它生成,(可能還有自己的擴展,比如index等)而是為了明白我們應該建立什么樣的表和實體類映射

        2    xml生成id

    a)         generator

             <id name="id" >

                 <generator class="native"></generator>

             </id>

    b)         常用四個:native identity sequence uuid

        3        注解方式:@GeneratedValue

    a)       自定義ID

    b)       AUTO(直接寫 @GeneratedValue 相當如native) (@GeneratedValue(strategy=GenerationType.AUTO))

                           i.      默認:對 MySQL,使用auto_increment

                        ii.      Oracle使用hibernate_sequence(名稱固定)

    c)       IDENTITY(@GeneratedValue(strategy=GenerationType.IDENTITY))

    d)       SEQUENCE(@GeneratedValue(strategy=GenerationType.SEQUENCE))

                           i.      @SequenceGenerator(可自定義在數據庫生成指定的sequence名)

            @Id

    //@GeneratedValue中增加 generator="teacherSEQ"

    @GeneratedValue(strategy=GenerationType.SEQUENCE,generator="teacherSEQ")

    //"teacherSEQ"@SequenceGenerator的標識名

    //"teacherSEQ_DB"為指定到數據庫生成的Sequence

    @SequenceGenerator(name="teacherSEQ", sequenceName="teacherSEQ_DB")

    public int getId() {

                        return id;

    }

    e)       TABLE (可以忘記)

                             i.        @TableGenerator

    @TableGenerator(

    name="teacherID",                     //被調用的TABLE名字

              table="teacherID_DB",                //數據庫建立的表名

              pkColumnName="key_value",

              pkColumnValue="pk_value",

              valueColumnName="teacher",             //pkColumnValue對應類名

              allocationSize=1                          //pkColumnValue對應類名

    )

     

    @GeneratedValue(strategy=GenerationType.TABLE,generator=" teacherID ")

     

           注:如果使用注解方式的uuid 如下:

                  @Id

    @GeneratedValue(generator="teacherUUID")

    @GenericGenerator(name="teacherUUID", strategy="uuid")

        4        FAQ;

    a) Junit測試時Hibernate Session Factory初始化異常不提示.疑似一個bug

    b) main來做測試

    5        聯合主鍵

    a) Xml方式: composite-id

                          i.        將聯合主鍵的屬性提取出來,重新編寫一個pojo類(原pojo類中的id,name要刪除 并新加入屬性“StudentPK”)

         public class StudentPK implements Serializable {

                       private String id;

                       private String name;

                       … …

                      ii.        新建pojo類必須實現 java.io.Serializable 序列化接

                   iii.        新pojo類要重寫equals和hashCode方法

    @Override

    public boolean equals(Object o) {

           if(o instanceof StudentPk) {

                  StudentPk pk = (StudentPk)o;

                  if(this.id == pk.getId() && this.name.equals(pk.getName())) {

                   return true;

                  }

           }

           return false;

    }

     

    @Override

    public int hashCode() {

           return this.name.hashCode();

    }

                      iv.        聯合主鍵生成策略XML配置方法

           <hibernate-mapping>

                       <class name="com.bjsxt.pojo.Student" >

                                <composite-id name="studentPK" class="com.bjsxt.pojo.StudentPK">

                                         <key-property name="id"></key-property>

                                         <key-property name="name"></key-property>

                                </composite-id>

                                <property name="age" />

                                <property name="sex" />

                                <property name="good" type="yes_no"></property>

                       </class>

    </hibernate-mapping>

     

    b) Annotation

                          i.        前三步與Xml方式前三步一樣 都要建立新pojo類 都要實現Serializable接口 重寫equals和hashCode方法.

                      ii.        方法1在新類前寫@Embeddable,在原pojo類的新屬性“TercherPK”的get方法前寫@ld,如下

        @ Embeddable

    public class TeacherPK implements Serializable {

                       private String id;

                       private String name;

                       … …

     

                 @Entity

    public class Teacher {

    private TeacherPK teacherPK ;

    @Id

    public TeacherPK getTeacherPK() {

                                return teacherPK;

    }

    … …

                   iii.        方法2:@EmbeddedlD(*) pojo類無需加注解,只需在原pojo新屬性“TercherPK”的get方法前寫@EmbeddedlD即可

                         iv.        方法3@Id  @IdClass(*)  pojo類無需加注解,原pojo類的id,name屬性保留不變,也無需新增“TercherPK”屬性。 只在id,nameget方法前都加@Id,并在原pojo類前加@IdClass(TeacherPK).class),如下

    @Entity

    @IdClass(TeacherPK.class)

    public class Teacher {

    private String id;

    private String name;

    @Id

    public String getId() {

                  return id;

    }

    @Id

    public String getName() {

                  return name;

    }

    ... ...



    posted on 2011-10-07 09:27 安多 閱讀(393) 評論(0)  編輯  收藏 所屬分類: S2SH Learning
     
    Copyright © 安多 Powered by: 博客園 模板提供:滬江博客
    主站蜘蛛池模板: 亚洲毛片免费观看| 国产真人无码作爱视频免费| 午夜免费1000部| 亚洲视频在线观看视频| 99久久免费看国产精品| 精品亚洲成a人片在线观看少妇| 免费人成网站在线观看不卡| 久久精品国产亚洲AV果冻传媒| 成全视频免费观看在线看| 久久99国产亚洲精品观看| 日韩免费的视频在线观看香蕉| 亚洲国产女人aaa毛片在线| 人妻无码一区二区三区免费 | 一区二区三区在线免费看| 亚洲午夜视频在线观看| 国产在线观看麻豆91精品免费 | 亚洲人成亚洲精品| 无码国产精品一区二区免费虚拟VR| 亚洲的天堂av无码| 成人免费视频一区二区三区| 午夜亚洲国产理论片二级港台二级| 亚洲国产精品第一区二区三区| 99视频在线观看免费| 久久精品a亚洲国产v高清不卡| 思思re热免费精品视频66| 亚洲国产午夜精品理论片在线播放| 免费人成网站在线高清| 免费无码作爱视频| 亚洲日韩乱码久久久久久| 日本一道一区二区免费看| 中文字幕免费在线观看动作大片 | 亚洲一区二区三区免费在线观看| 女人毛片a级大学毛片免费| 免费精品视频在线| 亚洲高清美女一区二区三区| 性做久久久久免费观看| 国产一区二区三区免费观看在线| 亚洲乱人伦精品图片| 亚洲精品高清一二区久久| 亚洲视频在线免费播放| 免费看一级高潮毛片|