上次的博文Hibernate從入門到精通(六)一對一雙向關聯映射中我們介紹了一下一對一雙向關聯映射,本 次博文我們講解一下多對一關聯映射
多對一單向關聯映射
多對一關聯映射與一對一關聯映射類 似,只是在多對一的指向端可以存在多個對象,在指向端加載的時候,同時加載被指向端。
多對一和 一對一的異同
對比一對一單向關聯映射和多對一單向關聯映射,兩者的相同之處在於在指向端被加載 的時候,指向端會被一起加載進來,這一點從如下類的結構圖和代碼中看出。(以下只給出多對一相關圖示和 代碼,一對一圖示和代碼參考之前的文章Hibernate從入門到精通(五)一對一單向關聯映射)
public class Group { private int id; private String name; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } } public class User { private int id; private String name; private Group group; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Group getGroup() { return group; } public void setGroup(Group group) { this.group = group; } }
通過分析上述代碼和類圖結構,單純的看兩者區別不大。但是通過映射表結構的對比,兩者的不同 之處在於指向端一個與被指向端的關系,一對一單向關聯是一對一關系,而多對一單向關聯則是多對一關系。 (以下只給出多對一相關圖示和代碼,一對一圖示和代碼參考之前的文章Hibernate從入門到精通(五)一對一 單向關聯映射)
通過上說說明,我們也可以簡單說一對一單向關聯其實是多對一單向關聯的一種特殊情況,這一點從其 Hibernate映射配置中可以更加明顯看出。
多對一映射配置:
<class name="com.zs.hibernate.User" table="t_user"> <id name="id"> <generator class="native"/> </id> <property name="name"/> <many-to-one name="group" column="groupid" cascade="save-update"/> </class> <class name="com.zs.hibernate.Group" table="t_group"> <id name="id"> <generator class="native"/> </id> <property name="name"/> </class>
一對一映射配置:
<class name="com.zs.hibernate.Person" table="t_person"> <id name="id"> <generator class="native"/> </id> <property name="name"/> <many-to-one name="idCard" unique="true"/> </class> <class name="com.zs.hibernate.IdCard" table="t_idCard"> <id name="id"> <generator class="native"/> </id> <property name="cardNo"/> </class>
我們從上面可以明顯看出一對一只是在<many-to-one/> 標簽中添加了 unique="true"這樣一個限制指向端的屬性而已。今天我們就講到這裡,下次我們講解一下關於一 對多關單向聯映射的相關內容。