本人覺得開始學(xué)Hibernate,它的映射關(guān)系很是麻煩,寫映射文件極為容易出錯。所以就把映射表各元素詳細(xì)解釋。以記之。
這個示例是一個很簡單的數(shù)據(jù)表結(jié)構(gòu),一共有五張表
Student(學(xué)生表)
Address(地址表)
Classes(班級表)
Course(課程表)
Student_Course(學(xué)生-課程關(guān)聯(lián)表)
關(guān)系結(jié)構(gòu):
Student與Address為一對一關(guān)系
Student與Classes為一對多關(guān)系
Student與Course為多對多關(guān)系
Address.hbm.xml文件如下:
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 2.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd" >
<hibernate-mapping>
<class
name="student.hibernate.Student"
table="Student"
>
<id
name="id"
type="java.lang.String"
column="id"
>
<generator class="uuid.hex" ></generator>
</id>
<property
name="name"
type="java.lang.String"
column="name"
not-null="true"
length="20"
/>
<property
name="sex"
type="java.lang.String"
column="sex"
length="10"
/>
<!-- bi-directional one-to-many association to StudentCourse -->
<!-- key is foregin key of table,use the first "many"'s primary key-->
<set name="courses" lazy="true" inverse="true" cascade="none"
table="student_course">
<key>
<column name="studentId" />
</key>
<many-to-many class="student.hibernate.Course"
column="courseId">
</many-to-many>
</set>
<!--many to one: column是以Classes表的主鍵作為此表的外鍵-->
<many-to-one name="classes" column="classesId" />
<!-- bi-directional one-to-one association to Address -->
<one-to-one name="address" class="student.hibernate.Address"
outer-join="auto" cascade="all" />
</class>
</hibernate-mapping>
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 2.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd" >
<hibernate-mapping>

<class
name="student.hibernate.Classes"
table="Classes"
>

<id
name="id"
type="java.lang.Integer"
column="id"
>
<!-- 主鍵生成方式“increment”表示自動增加,用于 int ,long,short 類型-->
<generator class="increment" />
</id>

<property
name="name"
type="java.lang.String"
column="name"
length="20"
/>

<!-- Associations -->
<!-- bi-directional one-to-many association to Student
一對多的關(guān)系--用set(JavaBean中定義的集合類型)標(biāo)簽
name 為類屬性
lazy 為延遲裝載
inverse (可選——默認(rèn)為false) 標(biāo)記這個集合作為雙向關(guān)聯(lián)關(guān)系中的方向一端。
cascade 表示級聯(lián)更新-->
<set
name="students"
lazy="true"
inverse="true"
cascade="none"
>
<!-- key 表示用本xml文件定義的表的主鍵作為 many(Student)端對應(yīng)表的外鍵 -->
<key>
<column name="classesId" ></column>
</key>
<one-to-many
class="student.hibernate.Student"
></one-to-many>
</set>
</class>
</hibernate-mapping>
Course.hbm.xml文件
這個示例是一個很簡單的數(shù)據(jù)表結(jié)構(gòu),一共有五張表
Student(學(xué)生表)
Address(地址表)
Classes(班級表)
Course(課程表)
Student_Course(學(xué)生-課程關(guān)聯(lián)表)
關(guān)系結(jié)構(gòu):
Student與Address為一對一關(guān)系
Student與Classes為一對多關(guān)系
Student與Course為多對多關(guān)系
Address.hbm.xml文件如下:
1
<?xml version="1.0"?>
2
<!DOCTYPE hibernate-mapping PUBLIC
3
"-//Hibernate/Hibernate Mapping DTD 2.0//EN"
4
"http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd">
5
<hibernate-mapping>
6
7
<!-- class 標(biāo)簽里寫明Class文件的地址與相對應(yīng)的表名 -->
8
<class
9
name="student.hibernate.Address"
10
table="Address"
11
>
12
<!-- id 為主鍵
13
name 為Class(JavaBean) 中的一個屬性
14
type 為Java類型
15
column 標(biāo)識Class文件對應(yīng)的數(shù)據(jù)表的主鍵 -->
16
<id
17
name="id"
18
type="java.lang.String"
19
column="id"
20
>
21
<!-- 以下是生成主鍵的方式
22
class="foreign" 表示為以外鍵方式生成(foregin為系統(tǒng)自帶的主鍵生成器),需要與one-to-one聯(lián)合起來使用
23
如果這個生成器實例需要某些配置值或者初始化參數(shù),用<param>元素來傳遞。
24
這里的屬性 property 為外鍵生成所必須的參數(shù)?為one-one結(jié)構(gòu)的第二個one的 name? -->
25
<generator class="foreign" >
26
<param name="property">student</param>
27
</generator>
28
</id>
29
<!-- property 定義 Class(JavaBean)的屬性,name為屬性名,column為對應(yīng)的表的字段 -->
30
<property
31
name="city"
32
type="java.lang.String"
33
column="city"
34
not-null="true"
35
length="20"
36
/>
37
<property
38
name="street"
39
type="java.lang.String"
40
column="street"
41
length="20"
42
/>
43
<property
44
name="doorplate"
45
type="java.lang.Integer"
46
column="doorplate"
47
length="10"
48
/>
49
50
<!-- bi-directional one-to-one association to Student -->
51
<!-- 以下是與Student對象一對一關(guān)系的定義
52
name="student"為JavaBean中定義的Student類的屬性 -->
53
<one-to-one
54
name="student"
55
class="student.hibernate.Student"
56
outer-join="auto"
57
constrained="false"
58
/>
59
</class>
60
</hibernate-mapping>
61

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

Student.hbm.xml的代碼:


















































Classes.hbm.xml文件代碼


















































Course.hbm.xml文件
1
<?xml version="1.0"?>
2
<!DOCTYPE hibernate-mapping PUBLIC
3
"-//Hibernate/Hibernate Mapping DTD 2.0//EN"
4
"http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd" >
5
<hibernate-mapping>
6
7
<class name="student.hibernate.Course" table="Course">
8
<id name="id" type="java.lang.Integer" column="id">
9
<generator class="increment" ></generator>
10
</id>
11
12
<property name="name" type="java.lang.String" column="name"
13
not-null="true" length="20" />
14
15
<!-- bi-directional one-to-many association to StudentCourse -->
16
<!-- 多對多關(guān)系,這里用 set 標(biāo)簽
17
table 為多對多關(guān)系中的中間表
18
key 定義本xml文件定義的表的主鍵作為中間表的外鍵 -->
19
<set name="students" lazy="true" inverse="true"
20
cascade="none" table="student_course">
21
<key>
22
<column name="courseId" ></column>
23
</key>
24
<!-- 定義多對多關(guān)系中后一個 many 對應(yīng)的Class
25
column 為以后一個many(Student)對應(yīng)表的主鍵作為中間表的外鍵 -->
26
<many-to-many class="student.hibernate.Student"
27
column="studentId">
28
</many-to-many>
29
</set>
30
</class>
31
</hibernate-mapping>
32

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32
