多对一的单向关联
表于表的关联可以分为一对一,一对多,多对一和多对多
例如在网络商城中,一个大的商品分类下,有多个小的商品分类,一个小的商品分类下,有多个商品
多对一的单向关联
例如
tab
<many-to-one name="category" class="com.rbh.examples.Category" outer-join="true"> <column name="category_id"></column> </many-to-one>
一对多的关联
Product与Category是多对一的关系,Product对象维护着对Category对象的参考,如果由Category对象维护多个Product对象的管理,就是一对多单向关联
<set name="products"> <key column="category_id"></key> <one-to-many class="com.rbh.examples.Product"/> </set>
一对多双向关联
<many-to-one name="category" class="com.rbh.examples.Category" fetch="select"> <column name="CATEGORY_ID" precision="8" scale="0" /> </many-to-one>
<set name="products"> <key> <column name="CATEGORY_ID" precision="8" scale="0" /> </key> <one-to-many class="com.rbh.examples.Product" /> </set>
级联(cascade)
主动方对象执行操作时,被关联对象(被动方)是否同步执行同一个操作
<set name="products" cascade="save-update"> <key column="category_id"></key> <one-to-many class="com.rbh.examples.Product"> </set>
级联(cascade)
none cascade的默认值,表示关联对象之间没有任何级联操作。
save-update 表示主动方对象在调用save()、update()和saveorUpdate()方法时对被关联对象进行级联操作
delete 表示主动方对象在调用save()方法时对被关联对象进行级联操作
delete-orphan 只应用于一对多关联,表面主动对象调用delete()方法,此时不被任何一个关联对象所引用被关联对象会删除.
all 关联对象之间全部操作都顺着关联关系级联
控制反转(Inverse)
Hibernate中的一对多的单向或者双向关联的情况下,我们可以将"一"方控制权给"多"方,称为控制反转(inverse)
<set name="prodects" cascade="save-update" inverse="true"> <key column="category_id"></key> <one-to-many class="com.rbh.examples.Product"> </set>