<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類的idname屬性保留不變,也無需新增“TercherPK”屬性。 只在idnameget方法前都加@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: 博客園 模板提供:滬江博客
    主站蜘蛛池模板: 在线看片免费人成视频福利| 120秒男女动态视频免费| 国产亚洲精品美女久久久| 99在线观看免费视频| 亚洲一久久久久久久久| 亚洲免费视频一区二区三区| 无码av免费一区二区三区| 亚洲欧美综合精品成人导航| 亚洲宅男天堂在线观看无病毒| 国产在线观看麻豆91精品免费 | 亚洲不卡av不卡一区二区| 国产桃色在线成免费视频| 国产福利电影一区二区三区,免费久久久久久久精 | 亚洲人成色777777在线观看| 两性刺激生活片免费视频| 又大又硬又粗又黄的视频免费看| 4480yy私人影院亚洲| 亚洲高清无码在线观看| 日本人的色道免费网站| japanese色国产在线看免费| 一本色道久久综合亚洲精品蜜桃冫| 国产成人毛片亚洲精品| 成人毛片18女人毛片免费视频未 | 国产亚洲视频在线观看网址| 亚洲精品高清国产一久久| 亚洲区小说区图片区| 拨牐拨牐x8免费| 日本免费人成视频在线观看| 一级毛片免费在线| 亚洲av午夜国产精品无码中文字| 久久久久久亚洲精品成人| 久久久精品国产亚洲成人满18免费网站 | 国产又大又粗又长免费视频 | 国产一级淫片a免费播放口| 国产亚洲精品成人久久网站| 亚洲中文无码线在线观看| 亚洲国产成人久久综合碰碰动漫3d| 免费女人18毛片a级毛片视频| 免费电影在线观看网站| 1000部羞羞禁止免费观看视频 | 中文字幕成人免费高清在线视频|