在hibernate中,component是某個(gè)實(shí)體的邏輯組成部分,它與實(shí)體的根本區(qū)別是沒有oid, component可以成為是值對(duì)象(DDD)
采用component映射的好處:它實(shí)現(xiàn)了對(duì)象模型的細(xì)粒度劃分,層次會(huì)更分明,復(fù)用率會(huì)更高。 例子:一個(gè)用戶類,包含比較多的用戶信息,姓名、地址、電子郵件、郵編、電話等等,因此這樣如果只集中一個(gè)POJO類的話,就造成對(duì)象模型的力度比較粗,因此有必要重新劃分對(duì)象粒度,提供程序運(yùn)行效率。 因此把User劃分為User和Contact兩個(gè)類 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
4、數(shù)據(jù)庫(kù)表結(jié)構(gòu): 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)