级联操作
来源:互联网 发布:cf装备淘宝店 编辑:程序博客网 时间:2024/05/16 08:50
在对象-关系映射文件中,用于映射持久化类之间关联关系的元素,如<set>,<many-to-one>,<one-to-one>元素,都有一个cascade属性,
它用于指定如何操纵与当前对象关联的其他对象。
none:在保存,更新或删除当前对象时,忽略其他关联的对象。他是cascade属性的默认值。
save-update:当通过Session的save(),update()以及saveOrUpdate()方法类保存或更新当前对象时,级联保存所有关联的新建的临时对象,并且级联更新所有关联的游离对象。
delete:当通过Session的delete()方法删除当前对象时,级联删除所有关联的对象。
all:包含save-update和delete的行为,此外,对当前对象执行evict() 或lock()操作时,也会对所有关联的持久化对象执行evict() 或lock()操作。
delete-orphan:删除所有和当前对象解除关联关系的对象。
all-delete-orphan:包含all和delete-orphan的行为
例如:
<set name="chidCategories" cascade="save-update" inverse="true">
<key column="CATEGORY_ID"/>
<one-to-many class="mypack.Category"/>
</set>
<many-to-one name="parentCategory" column="CATEGORY_ID" class="mypack.Category" cascade="save-update"/>
<set>元素中的cascade="save-update",因此在保存或更新当前category对象时,Session会调用getChildCategories()方法,导航到所有的子类别Category对象,然后对这些子类别Category对象进行级联保存或更新。
<many-to-one>元素的cascade="save-update",因此在保存或更新当前Category对象时,Session会调用getParentCategory()方法,导航到父类别Category对象,然后对父类别Category对象进行级联保存或更新,找到父之后,系统会自动找到其父的子节点进行更新。
假如有1000个Category游离对象相互关联,Session就会执行1000条多余的update语句,则影响应用程序的性能。解决办法时把<many-to-one>元素的cascade属性设置默认值none,而<set>元素的cascade属性设置为save-update。这样,Session在通过save()方法保存子对象时,就不会去找其父节点对象。因此Session在清理缓存时,只需要执行一条insert语句。
当然,如果当前对象还关联了子类别Category临时对象,Session会通过getChildCategories()方法导航到子类别Category临时对象,并对他们进行级联保存操作。
- 级联操作
- 级联操作
- 级联操作
- 级联操作
- 级联操作
- HIBERNATE中级联操作
- LinQ的级联操作
- hibernate 级联操作
- SQL级联操作设置
- hibernate的级联操作
- Hibernate级联操作Cascade
- Ajax级联操作
- 级联与Session操作
- Javascript级联操作代码
- JS 操作级联
- SQL级联操作设置
- OntToMany级联操作
- hibernate级联操作详解
- Oracle关于java.sql.SQLException常见错误集锦
- 傻比百度来到CSDN
- the intervals
- 防止连续读time出错的处理---------后来证明不需要。(硬件上同一个总线)
- java.util.ConcurrentModificationException
- 级联操作
- NAT 类型及检测方法
- Get control name in Page_Load event which make the post back
- Cisco交换机功能性命令简介(一)
- 穿越NAT的p2p通信方法研究
- Cisco交换机功能性命令简介(二)
- ScriptX 页面打印
- oracle常用系统表
- 谈CSS书写风格(关于横向和纵向)