单向一对多关联:
由“一”
的一端加载“多”
的一端,关系由“一”的一端来维护
在JavaBean中是在“一”的一端中持有“多”的一端的集合
Hibernate把这种关系反映到数据库的策略是在“多”的一端的表上加一个外键指向“一”的一端的表
在“一”的一端维护关系是不提倡的
将“多”的一端的外键添加非空约束,导致数据不能插入
插入数据效率降低
反过来看,一个区可以有多个街道
public
class Street implements java.io.Serializable
{
//街道
private
Long id;
private
Long district_id;
private
String name;
/** 默认的构造方法
*/
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
{
//区
private
Long id;
private
String name;
private
Set streets = new HashSet();
/** 默认的构造方法
*/
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"/><!-- 设置关系的字段 -->
</key>
<one-to-many class="cn.jbit.houserent.bean.Street"
/><!-- 设置关系的对象 -->
</set>
</class>
</hibernate-mapping>
set元素的常用属性:
属性 |
含义和作用 |
必须 |
默认值 |
name |
映射类属性的名称 |
Y |
|
table |
关联类的目标数据库表 |
N |
|
lazy |
指定关联对象是否使用延迟加载以及延迟加载的策略 |
N |
proxy |
fetch |
设置抓取数据的策略 |
N |
select |
同时配置两者就成了双向一对多关联