在hibernate中,component是某個實體的邏輯組成部分,它與實體的根本區別是沒有oid,
component可以成為是值對象(DDD)
采用component映射的好處:它實現了對象模型的細粒度劃分,層次會更分明,復用率會更高。
例子:一個用戶類,包含比較多的用戶信息,姓名、地址、電子郵件、郵編、電話等等,因此這樣如果只集中一個POJO類的話,就造成對象模型的力度比較粗,因此有必要重新劃分對象粒度,提供程序運行效率。
因此把User劃分為User和Contact兩個類
1、User的POJO類
public class User {
private int id;
private String name;
private Contact contact;
//省略setter、getter方法
}
2、從User中劃分出來的Contact類
public class Contact {
private String email;
private String address;
private String zipCode;
private String contactTel;
//省略setter、getter方法
}
3、User的映射文件User.hbm.xml

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

4、數據庫表結構:
mysql> desc t_user;
+------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+------------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(255) | YES | | NULL | |
| email | varchar(255) | YES | | NULL | |
| address | varchar(255) | YES | | NULL | |
| zipCode | varchar(255) | YES | | NULL | |
| contactTel | varchar(255) | YES | | NULL | |
+------------+--------------+------+-----+---------+----------------+
6 rows in set (0.02 sec)

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

PS、由于Contact沒有映射文件,在User中使用了Component映射標簽,加入Contact里面的屬性,所以在測試方法里面不用調用session.save(contact);,只調用第15行中的u.setContact(contact);即可。
-------------------------------------------------------------------------------------------------
PS:本博客文章,如果沒有注明是有“轉”字樣,屬于本人原創。如果需要轉載,務必注明作者和文章的詳細出處地址,否則不允許轉載,多謝合作!