單向一對(duì)多關(guān)聯(lián):
由“一”
的一端加載“多”
的一端,關(guān)系由“一”的一端來(lái)維護(hù)
在JavaBean中是在“一”的一端中持有“多”的一端的集合
Hibernate把這種關(guān)系反映到數(shù)據(jù)庫(kù)的策略是在“多”的一端的表上加一個(gè)外鍵指向“一”的一端的表
在“一”的一端維護(hù)關(guān)系是不提倡的
將“多”的一端的外鍵添加非空約束,導(dǎo)致數(shù)據(jù)不能插入
插入數(shù)據(jù)效率降低
反過(guò)來(lái)看,一個(gè)區(qū)可以有多個(gè)街道
public
class Street implements java.io.Serializable
{
//街道
private
Long id;
private
Long district_id;
private
String name;
/** 默認(rèn)的構(gòu)造方法
*/
public
Street(){
}
// 省略部分setter/getter方法
public
Long
getDistrict_id(){
return
district_id;
}
public void
setDistrict_id(Long
district_id)
{
this.district_id
=
district_id;
}
}
public
class District implements java.io.Serializable
{
//區(qū)
private
Long id;
private
String name;
private
Set streets = new HashSet();
/** 默認(rèn)的構(gòu)造方法
*/
public
District(){
}
// 省略部分setter/getter方法
public
Set
getStreets(){
return this.streets;
}
public void setStreets(Set
streets)
{
this.streets
=
streets;
}
}
<hibernate-mapping>
<class name="cn.jbit.houserent.bean.District"
table="district">
<id name="id" type="java.lang.Long">
<column name="id" />
<generator class="native" />
</id>
<property name="name" type="java.lang.String">
<column name="name" length="50" not-null="true" />
</property>
<set
name="streets" table="street“>
<key>
<column name="district_id"/><!-- 設(shè)置關(guān)系的字段 -->
</key>
<one-to-many class="cn.jbit.houserent.bean.Street"
/><!-- 設(shè)置關(guān)系的對(duì)象 -->
</set>
</class>
</hibernate-mapping>
set元素的常用屬性:
屬性 |
含義和作用 |
必須 |
默認(rèn)值 |
name |
映射類(lèi)屬性的名稱(chēng) |
Y |
|
table |
關(guān)聯(lián)類(lèi)的目標(biāo)數(shù)據(jù)庫(kù)表 |
N |
|
lazy |
指定關(guān)聯(lián)對(duì)象是否使用延遲加載以及延遲加載的策略 |
N |
proxy |
fetch |
設(shè)置抓取數(shù)據(jù)的策略 |
N |
select |
同時(shí)配置兩者就成了雙向一對(duì)多關(guān)聯(lián)