读书人

Hibernate学习札记(五)映射一对多关

发布时间: 2012-10-14 14:55:07 作者: rapoo

Hibernate学习笔记(五)映射一对多关联关系
映射一对多关联关系
在关系数据库中,只存在外键参照关系,而且总是由"many"方参照"one"方,因为这样才能消除数据冗余,
因此关系数据库实际上只支持多对一或一对一的单向关联。

在配置文件中"多的"一方对应"一的"一方,属性不可以用<property>来配置
e.g.<many-to-one
name="customer"
column="CUSTOMER_ID"
table="CATEGORY">
<id name="id" column="ID" type="java.lang.Integer">
<generator column="NAME" type="java.lang.String"/>
<many-to-one
name="parentCategory"
column="CATEGORY_ID"
class="com.shaogq.relational.one2more2myself.Category"
not-null="false"
cascade="save-update"
/>
<set name="childCategories"
cascade="save-update"
inverse="true"
>
<key column="CATEGORY_ID"/>
<one-to-many class="com.shaogq.relational.one2more2myself.Category"/>
</set>
</class>



cascade属性说明:
cascade属性值描述
none当通过Session操纵当前对象时,忽略其他关联对象。它是cascade属性的默认值。
save-update当通过Session的save()、update()及saveOrUpdate()方法来保存或更新当前对象时,级联保存所有关联的 新建的临时对象,并且级联更新所有关联的游离对象。
persist当通过Session的persist()方法来保存当前对象时,会级联保存所有关联的新建的临时对象。
merge当通过Session的merge()方法来融合当前对象是,会级联融合所有关联的游离对象。
delete当通过Session的delete()方法删除当前对象时,会级联删除所有关联的对象。
lock当通过Session的lock()方法把当前游离对象加入到Session缓存中时,会把所有关联的游离对象也加入到Session缓存中。
replicate当通过Session的replicate()方法复制当前对象时,会级联复制所有关联的对象。
evict当通过Session的evice()方法从Session缓存中清除当前对象时,会级联清除所有关联的对象。
refresh当通过Session的refresh()方法刷新当前对象时,会吉林刷新所有关联的对象。所谓的刷新是指读取数据库中相应数据,
然后根据数据库中的最新数据去同步更新Session缓存中的相应对象。
all包含save-update,persist,merge,delete,locak,replicate,evict及refresh的行为。
delete-orphan删除所有和当前对象接触关联关系的对象。
all-delete-orphan包含all和delete-orphan的行为。

读书人网 >编程

热点推荐