天天看點

Hibernate的一對一關聯執行個體

Hibernate的一對一關聯執行個體

Hibernate中的表的關聯有一對一,一對多和多對多三種關聯方式,在這篇筆記和接下來的筆記中,我将用我自己的實際例子來說明如何具體實施。

      我使用的Hibernate版本是2.1.8,在Hibernate的網站2.1.6版本的中文文檔中有關一對一的關聯有下面一段表述:

Hibernate的一對一關聯執行個體

5.1.11. 一對一

Hibernate的一對一關聯執行個體

持久化對象之間一對一的關聯關系是通過one-to-one元素定義的。 

Hibernate的一對一關聯執行個體
Hibernate的一對一關聯執行個體

< one-to-one

Hibernate的一對一關聯執行個體

         name ="propertyName"                                 (1)

Hibernate的一對一關聯執行個體

        class ="ClassName"                                   (2)

Hibernate的一對一關聯執行個體

        cascade ="all|none|save-update|delete"               (3)

Hibernate的一對一關聯執行個體

        constrained ="true|false"                            (4)

Hibernate的一對一關聯執行個體

        outer-join ="true|false|auto"                        (5)

Hibernate的一對一關聯執行個體

        property-ref ="propertyNameFromAssociatedClass"      (6)

Hibernate的一對一關聯執行個體

        access ="field|property|ClassName"                   (7)

Hibernate的一對一關聯執行個體
Hibernate的一對一關聯執行個體

/>

Hibernate的一對一關聯執行個體

(1) name: 屬性的名字。 

Hibernate的一對一關聯執行個體
Hibernate的一對一關聯執行個體

(2) class (可選 - 預設是通過反射得到的屬性類型):被關聯的類的名字。 

Hibernate的一對一關聯執行個體
Hibernate的一對一關聯執行個體

(3) cascade(級聯) (可選) 表明操作是否從父對象級聯到被關聯的對象。 

Hibernate的一對一關聯執行個體
Hibernate的一對一關聯執行個體

(4) constrained(限制) (可選) 表明該類對應的表對應的資料庫表,和被關聯的對象所對應的資料庫表之間,通過一個外鍵引用對主鍵進行限制。這個選項影響save()和delete()在級聯執行時的先後順序(也在schema export tool中被使用)。 

Hibernate的一對一關聯執行個體
Hibernate的一對一關聯執行個體

(5) outer-join(外連接配接) (可選 - 預設為 自動): 當設定hibernate.use_outer_join的時候,對這個關聯允許外連接配接抓取。 

Hibernate的一對一關聯執行個體
Hibernate的一對一關聯執行個體

(6) property-ref: (可選) 指定關聯類的一個屬性,這個屬性将會和本外鍵相對應。如果沒有指定,會使用對方關聯類的主鍵。 

Hibernate的一對一關聯執行個體
Hibernate的一對一關聯執行個體

(7) access (可選 - 預設是 property): Hibernate用來通路屬性的政策。 

Hibernate的一對一關聯執行個體
Hibernate的一對一關聯執行個體
Hibernate的一對一關聯執行個體

有兩種不同的一對一關聯: 

Hibernate的一對一關聯執行個體
Hibernate的一對一關聯執行個體

主鍵關聯 

Hibernate的一對一關聯執行個體
Hibernate的一對一關聯執行個體

惟一外鍵關聯 

Hibernate的一對一關聯執行個體
Hibernate的一對一關聯執行個體

主鍵關聯不需要額外的表字段;兩行是通過這種一對一關系相關聯的,那麼這兩行就共享同樣的主關鍵字值。是以如果你希望兩個對象通過主鍵一對一關聯,你必須确認它們被賦予同樣的辨別值! 

Hibernate的一對一關聯執行個體
Hibernate的一對一關聯執行個體

比如說,對下面的Employee和Person進行主鍵一對一關聯: 

Hibernate的一對一關聯執行個體
Hibernate的一對一關聯執行個體

< one-to-one  name ="person"  class ="Person" />

Hibernate的一對一關聯執行個體

< one-to-one  name ="employee"  class ="Employee"  constrained ="true" />

Hibernate的一對一關聯執行個體

現在我們必須確定PERSON和EMPLOYEE中相關的字段是相等的。我們使用一個特别的稱為foreign的Hibernate辨別符生成器政策: 

Hibernate的一對一關聯執行個體
Hibernate的一對一關聯執行個體

< class  name ="person"  table ="PERSON" >

Hibernate的一對一關聯執行個體

     < id  name ="id"  column ="PERSON_ID" >

Hibernate的一對一關聯執行個體

         < generator  class ="foreign" >

Hibernate的一對一關聯執行個體

             < param  name ="property" > employee </ param >

Hibernate的一對一關聯執行個體

         </ generator >

Hibernate的一對一關聯執行個體

     </ id >

Hibernate的一對一關聯執行個體
Hibernate的一對一關聯執行個體
Hibernate的一對一關聯執行個體

     < one-to-one  name ="employee"

Hibernate的一對一關聯執行個體

        class ="Employee"

Hibernate的一對一關聯執行個體

        constrained ="true" />

Hibernate的一對一關聯執行個體

</ class >

Hibernate的一對一關聯執行個體

一個剛剛儲存的Person執行個體被賦予和該Person的employee屬性所指向的Employee執行個體同樣的關鍵字值。 

Hibernate的一對一關聯執行個體
Hibernate的一對一關聯執行個體

另一種方式是一個外鍵和一個惟一關鍵字對應,上面的Employee和Person的例子,如果使這種關聯方式,應該表達成: 

Hibernate的一對一關聯執行個體
Hibernate的一對一關聯執行個體

< many-to-one  name ="person"  class ="Person"  column ="PERSON_ID"  unique ="true" />

Hibernate的一對一關聯執行個體

如果在Person的映射加入下面幾句,這種關聯就是雙向的: 

Hibernate的一對一關聯執行個體
Hibernate的一對一關聯執行個體

< one-to-one  name"employee" class ="Employee"  property-ref ="person" />

Hibernate的一對一關聯執行個體

      下面是我的一個一對一主鍵關聯的例子,使用的資料庫是MySQL 4.1.11:

      我有兩個表:UserBasic和UserInfo,UserBasic記錄的是使用者的基本注冊資訊,UserInfo表記錄的是使用者的詳細資訊。表的結構如下:

 1

Hibernate的一對一關聯執行個體

CREATE   TABLE   IF   NOT   EXISTS  UserBasic

 2

Hibernate的一對一關聯執行個體

(

 3

Hibernate的一對一關聯執行個體

   Guid                            INT                              NOT   NULL  AUTO_INCREMENT,

 4

Hibernate的一對一關聯執行個體

   Account                         VARCHAR ( 64 )                     NOT   NULL ,

 5

Hibernate的一對一關聯執行個體

   Password                        VARCHAR ( 16 )                     NOT   NULL ,

 6

Hibernate的一對一關聯執行個體

   Email                           VARCHAR ( 128 )                    NOT   NULL ,

 7

Hibernate的一對一關聯執行個體

    PRIMARY   KEY  (Guid)

 8

Hibernate的一對一關聯執行個體

) TYPE = InnoDB;

 9

Hibernate的一對一關聯執行個體

10

Hibernate的一對一關聯執行個體

CREATE   TABLE   IF   NOT   EXISTS  UserInfo

11

Hibernate的一對一關聯執行個體

(

12

Hibernate的一對一關聯執行個體

   Guid                            INT                              NOT   NULL ,

13

Hibernate的一對一關聯執行個體

   Username                        VARCHAR ( 128 ),

14

Hibernate的一對一關聯執行個體

   Gender                          CHAR ( 1 ),

15

Hibernate的一對一關聯執行個體

   Birthday                        DATETIME ,

16

Hibernate的一對一關聯執行個體

    PRIMARY   KEY  (Guid)

17

Hibernate的一對一關聯執行個體

) TYPE = InnoDB;

18

Hibernate的一對一關聯執行個體

19

Hibernate的一對一關聯執行個體

ALTER   TABLE  UserInfo  ADD   CONSTRAINT  UserInfoRFUserBasic  FOREIGN   KEY  (Guid) 

20

Hibernate的一對一關聯執行個體

    REFERENCES  UserBasic (Guid)  ON   DELETE   CASCADE   ON   UPDATE   RESTRICT ;

      UserInfo的主鍵值和UserBasic的主鍵值是一樣的,兩個表是單向的一對一關系。UserBasic為主要方,UserInfo是被動方。

      用Middlegen生成的UserBasic.hbm.xml檔案,修改後的内容如下:

  1

Hibernate的一對一關聯執行個體

<? xml version="1.0" ?>

  2

Hibernate的一對一關聯執行個體

<! DOCTYPE hibernate-mapping PUBLIC

  3

Hibernate的一對一關聯執行個體

    "-//Hibernate/Hibernate Mapping DTD 2.0//EN"

  4

Hibernate的一對一關聯執行個體

    "http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd"  >

  5

Hibernate的一對一關聯執行個體

  6

Hibernate的一對一關聯執行個體

< hibernate-mapping >

  7

Hibernate的一對一關聯執行個體

<!--  

  8

Hibernate的一對一關聯執行個體

    Created by the Middlegen Hibernate plugin 2.1

  9

Hibernate的一對一關聯執行個體

 10

Hibernate的一對一關聯執行個體

    http://boss.bekk.no/boss/middlegen/

 11

Hibernate的一對一關聯執行個體

    http://www.hibernate.org/

 12

Hibernate的一對一關聯執行個體

-->

 13

Hibernate的一對一關聯執行個體

 14

Hibernate的一對一關聯執行個體

< class 

 15

Hibernate的一對一關聯執行個體

     name ="com.xxx.hibernate.UserBasic"  

 16

Hibernate的一對一關聯執行個體

    table ="UserBasic"

 17

Hibernate的一對一關聯執行個體

    dynamic-update ="true"

 18

Hibernate的一對一關聯執行個體

    dynamic-insert ="true"

 19

Hibernate的一對一關聯執行個體

>

 20

Hibernate的一對一關聯執行個體

     < meta  attribute ="class-description"  inherit ="false" >

 21

Hibernate的一對一關聯執行個體

       @hibernate.class

 22

Hibernate的一對一關聯執行個體

        table="UserBasic"

 23

Hibernate的一對一關聯執行個體

        dynamic-update="true"

 24

Hibernate的一對一關聯執行個體

        dynamic-insert="true"

 25

Hibernate的一對一關聯執行個體

     </ meta >

 26

Hibernate的一對一關聯執行個體

 27

Hibernate的一對一關聯執行個體

     < id

 28

Hibernate的一對一關聯執行個體

         name ="guid"

 29

Hibernate的一對一關聯執行個體

        type ="int"

 30

Hibernate的一對一關聯執行個體

        column ="Guid"

 31

Hibernate的一對一關聯執行個體

     >

 32

Hibernate的一對一關聯執行個體

         < meta  attribute ="field-description" >

 33

Hibernate的一對一關聯執行個體

           @hibernate.id

 34

Hibernate的一對一關聯執行個體

            generator-class="native"

 35

Hibernate的一對一關聯執行個體

            type="int"

 36

Hibernate的一對一關聯執行個體

            column="Guid"

 37

Hibernate的一對一關聯執行個體

 38

Hibernate的一對一關聯執行個體

 39

Hibernate的一對一關聯執行個體

         </ meta >

 40

Hibernate的一對一關聯執行個體

         < generator  class ="native"   />

 41

Hibernate的一對一關聯執行個體

     </ id >

 42

Hibernate的一對一關聯執行個體

 43

Hibernate的一對一關聯執行個體

     < property

 44

Hibernate的一對一關聯執行個體

         name ="account"

 45

Hibernate的一對一關聯執行個體

        type ="java.lang.String"

 46

Hibernate的一對一關聯執行個體

        column ="Account"

 47

Hibernate的一對一關聯執行個體

        not-null ="true"

 48

Hibernate的一對一關聯執行個體

        length ="64"

 49

Hibernate的一對一關聯執行個體

     >

 50

Hibernate的一對一關聯執行個體

         < meta  attribute ="field-description" >

 51

Hibernate的一對一關聯執行個體

           @hibernate.property

 52

Hibernate的一對一關聯執行個體

            column="Account"

 53

Hibernate的一對一關聯執行個體

            length="64"

 54

Hibernate的一對一關聯執行個體

            not-null="true"

 55

Hibernate的一對一關聯執行個體

         </ meta >     

 56

Hibernate的一對一關聯執行個體

     </ property >

 57

Hibernate的一對一關聯執行個體

     < property

 58

Hibernate的一對一關聯執行個體

         name ="password"

 59

Hibernate的一對一關聯執行個體

        type ="java.lang.String"

 60

Hibernate的一對一關聯執行個體

        column ="Password"

 61

Hibernate的一對一關聯執行個體

        not-null ="true"

 62

Hibernate的一對一關聯執行個體

        length ="16"

 63

Hibernate的一對一關聯執行個體

     >

 64

Hibernate的一對一關聯執行個體

         < meta  attribute ="field-description" >

 65

Hibernate的一對一關聯執行個體

           @hibernate.property

 66

Hibernate的一對一關聯執行個體

            column="Password"

 67

Hibernate的一對一關聯執行個體

            length="16"

 68

Hibernate的一對一關聯執行個體

            not-null="true"

 69

Hibernate的一對一關聯執行個體

         </ meta >     

 70

Hibernate的一對一關聯執行個體

     </ property >

 71

Hibernate的一對一關聯執行個體

     < property

 72

Hibernate的一對一關聯執行個體

         name ="email"

 73

Hibernate的一對一關聯執行個體

        type ="java.lang.String"

 74

Hibernate的一對一關聯執行個體

        column ="Email"

 75

Hibernate的一對一關聯執行個體

        not-null ="true"

 76

Hibernate的一對一關聯執行個體

        length ="128"

 77

Hibernate的一對一關聯執行個體

     >

 78

Hibernate的一對一關聯執行個體

         < meta  attribute ="field-description" >

 79

Hibernate的一對一關聯執行個體

           @hibernate.property

 80

Hibernate的一對一關聯執行個體

            column="Email"

 81

Hibernate的一對一關聯執行個體

            length="128"

 82

Hibernate的一對一關聯執行個體

            not-null="true"

 83

Hibernate的一對一關聯執行個體

         </ meta >     

 84

Hibernate的一對一關聯執行個體

     </ property >

 85

Hibernate的一對一關聯執行個體

 86

Hibernate的一對一關聯執行個體

     <!--  Associations  -->

 87

Hibernate的一對一關聯執行個體

 88

Hibernate的一對一關聯執行個體

     <!--  bi-directional one-to-one association to UserInfo  -->

 89

Hibernate的一對一關聯執行個體

     < one-to-one

 90

Hibernate的一對一關聯執行個體

         name ="userInfo"

 91

Hibernate的一對一關聯執行個體

        class ="com.xxx.hibernate.UserInfo"

 92

Hibernate的一對一關聯執行個體

        cascade ="save-update"

 93

Hibernate的一對一關聯執行個體

     >

 94

Hibernate的一對一關聯執行個體

         < meta  attribute ="field-description" >

 95

Hibernate的一對一關聯執行個體

           @hibernate.one-to-one

 96               class="com.xxx.hibernate.UserInfo"

 97

Hibernate的一對一關聯執行個體

            cascade="save-update"

 98

Hibernate的一對一關聯執行個體

         </ meta >

 99

Hibernate的一對一關聯執行個體

     </ one-to-one >

100

Hibernate的一對一關聯執行個體

101

Hibernate的一對一關聯執行個體

</ class >

102

Hibernate的一對一關聯執行個體

</ hibernate-mapping >

      由于在建立外鍵的時候就聲明了ON DELETE CASCADE,是以在xml的配置檔案中第97行聲明為save-update。如果聲明為all,那麼在删除UserBasic表的資料時,會無謂的多出一條删除UserInfo的delete語句出來。

      UserInfo.hbm.xml檔案的内容如下:

 1

Hibernate的一對一關聯執行個體

<? xml version = " 1.0 " ?>

 2

Hibernate的一對一關聯執行個體

<! DOCTYPE hibernate - mapping PUBLIC

 3

Hibernate的一對一關聯執行個體

     " -//Hibernate/Hibernate Mapping DTD 2.0//EN "

 4

Hibernate的一對一關聯執行個體

     " http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd "   >

 5

Hibernate的一對一關聯執行個體

 6

Hibernate的一對一關聯執行個體

< hibernate - mapping >

 7

Hibernate的一對一關聯執行個體

<!--  

 8

Hibernate的一對一關聯執行個體

    Created by the Middlegen Hibernate plugin  2.1

 9

Hibernate的一對一關聯執行個體

10

Hibernate的一對一關聯執行個體

    http: // boss.bekk.no/boss/middlegen/

11

Hibernate的一對一關聯執行個體

    http: // www.hibernate.org/

12

Hibernate的一對一關聯執行個體

-->

13

Hibernate的一對一關聯執行個體

14

Hibernate的一對一關聯執行個體

< class  

15

Hibernate的一對一關聯執行個體

    name = " com.xxx.hibernate.UserInfo "  

16

Hibernate的一對一關聯執行個體

    table = " UserInfo "

17

Hibernate的一對一關聯執行個體

    dynamic - update = " true "

18

Hibernate的一對一關聯執行個體

    dynamic - insert = " true "

19

Hibernate的一對一關聯執行個體

>

20

Hibernate的一對一關聯執行個體

     < meta attribute = " class-description "  inherit = " false " >

21

Hibernate的一對一關聯執行個體

       @hibernate. class

22

Hibernate的一對一關聯執行個體

        table = " UserInfo "

23

Hibernate的一對一關聯執行個體

        dynamic - update = " true "

24

Hibernate的一對一關聯執行個體

        dynamic - insert = " true "

25

Hibernate的一對一關聯執行個體

     </ meta >

26

Hibernate的一對一關聯執行個體

27

Hibernate的一對一關聯執行個體

     < id

28

Hibernate的一對一關聯執行個體

        name = " guid "

29

Hibernate的一對一關聯執行個體

        type = " int "

30

Hibernate的一對一關聯執行個體

        column = " Guid "

31

Hibernate的一對一關聯執行個體

     >

32

Hibernate的一對一關聯執行個體

         < meta attribute = " field-description " >

33

Hibernate的一對一關聯執行個體

           @hibernate.id

34

Hibernate的一對一關聯執行個體

            generator - class = " foreign "

35

Hibernate的一對一關聯執行個體

            type = " int "

36

Hibernate的一對一關聯執行個體

            column = " Guid "

37

Hibernate的一對一關聯執行個體

38

Hibernate的一對一關聯執行個體

39

Hibernate的一對一關聯執行個體

         </ meta >

40

Hibernate的一對一關聯執行個體

         < generator  class = " foreign " >

41

Hibernate的一對一關聯執行個體

             < param name = " property " > userBasic </ param >

42

Hibernate的一對一關聯執行個體

         </ generator >

43

Hibernate的一對一關聯執行個體

     </ id >

44

Hibernate的一對一關聯執行個體

45

Hibernate的一對一關聯執行個體

     < property

46

Hibernate的一對一關聯執行個體

        name = " username "

47

Hibernate的一對一關聯執行個體

        type = " java.lang.String "

48

Hibernate的一對一關聯執行個體

        column = " Username "

49

Hibernate的一對一關聯執行個體

        length = " 128 "

50

Hibernate的一對一關聯執行個體

     >

51

Hibernate的一對一關聯執行個體

         < meta attribute = " field-description " >

52

Hibernate的一對一關聯執行個體

           @hibernate.property

53

Hibernate的一對一關聯執行個體

            column = " Username "

54

Hibernate的一對一關聯執行個體

            length = " 128 "

55

Hibernate的一對一關聯執行個體

         </ meta >     

56

Hibernate的一對一關聯執行個體

     </ property >

57

Hibernate的一對一關聯執行個體

     < property

58

Hibernate的一對一關聯執行個體

        name = " gender "

59

Hibernate的一對一關聯執行個體

        type = " java.lang.String "

60

Hibernate的一對一關聯執行個體

        column = " Gender "

61

Hibernate的一對一關聯執行個體

        length = " 1 "

62

Hibernate的一對一關聯執行個體

     >

63

Hibernate的一對一關聯執行個體

         < meta attribute = " field-description " >

64

Hibernate的一對一關聯執行個體

           @hibernate.property

65

Hibernate的一對一關聯執行個體

            column = " Gender "

66

Hibernate的一對一關聯執行個體

            length = " 1 "

67

Hibernate的一對一關聯執行個體

         </ meta >     

68

Hibernate的一對一關聯執行個體

     </ property >

69

Hibernate的一對一關聯執行個體

     < property

70

Hibernate的一對一關聯執行個體

        name = " birthday "

71

Hibernate的一對一關聯執行個體

        type = " java.sql.Date "

72

Hibernate的一對一關聯執行個體

        column = " Birthday "

73

Hibernate的一對一關聯執行個體

        length = " 19 "

74

Hibernate的一對一關聯執行個體

     >

75

Hibernate的一對一關聯執行個體

         < meta attribute = " field-description " >

76

Hibernate的一對一關聯執行個體

           @hibernate.property

77

Hibernate的一對一關聯執行個體

            column = " Birthday "

78

Hibernate的一對一關聯執行個體

            length = " 19 "

79

Hibernate的一對一關聯執行個體

         </ meta >     

80

Hibernate的一對一關聯執行個體

     </ property >

81

Hibernate的一對一關聯執行個體

82

Hibernate的一對一關聯執行個體

     <!--  Associations  -->

83

Hibernate的一對一關聯執行個體

84

Hibernate的一對一關聯執行個體

     <!--  bi - directional one - to - one association to UserBasic  -->

85

Hibernate的一對一關聯執行個體

     < one - to - one

86

Hibernate的一對一關聯執行個體

        name = " userBasic "

87

Hibernate的一對一關聯執行個體

         class = " com.xxx.hibernate.UserBasic "

88

Hibernate的一對一關聯執行個體

        constrained = " true "

89

Hibernate的一對一關聯執行個體

     >

90

Hibernate的一對一關聯執行個體

         < meta attribute = " field-description " >

91

Hibernate的一對一關聯執行個體

           @hibernate.one - to - one

92

Hibernate的一對一關聯執行個體

             class = " com.xxx.hibernate.UserBasic "

93

Hibernate的一對一關聯執行個體

            constrained = " true "

94

Hibernate的一對一關聯執行個體

         </ meta >     

95

Hibernate的一對一關聯執行個體

     </ one - to - one >

96

Hibernate的一對一關聯執行個體

97

Hibernate的一對一關聯執行個體

</ class >

98

Hibernate的一對一關聯執行個體

</ hibernate - mapping >

      用hbm2java生成對應的對應的Java類:hbm2java *.xml --output=xxx。

      Hibernate的配置檔案hibernate.cfg.xml内容如下:

 1

Hibernate的一對一關聯執行個體

<? xml version="1.0" encoding="utf-8" ?>

 2

Hibernate的一對一關聯執行個體

<! DOCTYPE hibernate-configuration

 3

Hibernate的一對一關聯執行個體

    PUBLIC "-//Hibernate/Hibernate Configuration DTD//EN"

 4

Hibernate的一對一關聯執行個體

    "http://hibernate.sourceforge.net/hibernate-configuration-2.0.dtd" >

 5

Hibernate的一對一關聯執行個體

 6

Hibernate的一對一關聯執行個體

< hibernate-configuration >

 7

Hibernate的一對一關聯執行個體

     < session-factory >

 8

Hibernate的一對一關聯執行個體

 9

Hibernate的一對一關聯執行個體

         <!--  local connection properties  -->

10

Hibernate的一對一關聯執行個體

         < property  name ="hibernate.connection.url" > jdbc:mysql://127.0.0.1/xxx?useUnicode=true &amp; characterEncoding=UTF-8 &amp; autoReconnect=true </ property >

11

Hibernate的一對一關聯執行個體

         < property  name ="hibernate.connection.driver_class" > com.mysql.jdbc.Driver </ property >

12

Hibernate的一對一關聯執行個體

         < property  name ="hibernate.connection.username" > root </ property >

13

Hibernate的一對一關聯執行個體

         < property  name ="hibernate.connection.password" > 123456 </ property >

14

Hibernate的一對一關聯執行個體

         <!--  property name="hibernate.connection.pool_size"></property  -->

15

Hibernate的一對一關聯執行個體

16

Hibernate的一對一關聯執行個體

         <!--  dialect for MySQL  -->

17

Hibernate的一對一關聯執行個體

         < property  name ="dialect" > net.sf.hibernate.dialect.MySQLDialect </ property >

18

Hibernate的一對一關聯執行個體

19

Hibernate的一對一關聯執行個體

         < property  name ="hibernate.show_sql" > true </ property >

20

Hibernate的一對一關聯執行個體

         < property  name ="hibernate.use_outer_join" > true </ property >

21

Hibernate的一對一關聯執行個體

         < property  name ="hibernate.transaction.factory_class" > net.sf.hibernate.transaction.JDBCTransactionFactory </ property >

22

Hibernate的一對一關聯執行個體

23

Hibernate的一對一關聯執行個體

         < mapping  resource ="com/xxx/hibernate/UserBasic.hbm.xml" />

24

Hibernate的一對一關聯執行個體

         < mapping  resource ="com/xxx/hibernate/UserInfo.hbm.xml" />

25

Hibernate的一對一關聯執行個體

26

Hibernate的一對一關聯執行個體

     </ session-factory >

27

Hibernate的一對一關聯執行個體

</ hibernate-configuration >

      JUnit的測試用例程式片斷如下:

 1

Hibernate的一對一關聯執行個體
Hibernate的一對一關聯執行個體

     public   void  testInsertUser() throws Exception 

Hibernate的一對一關聯執行個體

{

 2

Hibernate的一對一關聯執行個體

        UserBasic user = new UserBasic();

 3

Hibernate的一對一關聯執行個體

        user.setAccount("test");

 4

Hibernate的一對一關聯執行個體

        user.setPassword("123456");

 5

Hibernate的一對一關聯執行個體

        user.setEmail("[email protected]");

 6

Hibernate的一對一關聯執行個體

 7

Hibernate的一對一關聯執行個體

        UserInfo info = new UserInfo();

 8

Hibernate的一對一關聯執行個體

        info.setUsername("George Hill");

 9

Hibernate的一對一關聯執行個體

        info.setGender("M");

10

Hibernate的一對一關聯執行個體

        info.setBirthday(new Date());

11

Hibernate的一對一關聯執行個體

12

Hibernate的一對一關聯執行個體

        user.setUserInfo(info);

13

Hibernate的一對一關聯執行個體

        info.setUserBasic(user);

14

Hibernate的一對一關聯執行個體

15

Hibernate的一對一關聯執行個體

        Transaction tx = session.beginTransaction();

16

Hibernate的一對一關聯執行個體

        session.save(user);

17

Hibernate的一對一關聯執行個體

        tx.commit();

18

Hibernate的一對一關聯執行個體

    }

      運作測試程式,可以看到輸出了兩條insert語句。  

繼續閱讀