当前位置:七道奇文章资讯编程技术Java编程
日期:2011-03-22 16:12:00  来源:本站整理

在Hibernate中切切当现关联关系中的级联操作(cascading)[Java编程]

赞助商链接



  本文“在Hibernate中切切当现关联关系中的级联操作(cascading)[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:

关系数据库系统本身就对比复杂,加上Hibernate的O/R映射层,复杂度加重了,很简单呈现问题,本人将近来碰到的问题和办理办法做一个总结,整理在下面的一系列文章中

精确理解Hibernate的聚合范例(collection)的利用

在Hibernate中精确切现关联关系中的级联操作(cascading)

在Hibernate框架中编写长期对象类实现外键关联的几点注意事项

本文是第二篇,讲授在one-to-many(一对多)和many-to-one(多对一)关联关系中的cascade特点的声明办法.在利用历程中最关键点是:头脑中要有一张长期对象关系树及其状况图(状况辨别是:Transient, Persistent, Detached),存在对象间关联关系时,假如利用了级联操作特点,要找到树的根对象(所以要用树,而不是图),从根往下级联操作,只做单方向的级联.

我们再次利用第一篇的例子,为了反映二者的关联关系,为User类我们声明以下一对多关系

<class name="User" table="USER">
...
<set name="preferences"
cascade="all,delete-orphan"
inverse="true">
<key column="USER_ID" not-null="true"/>
<one-to-many class="Preference"/>
</set>
...
</class>

而为Preference类声明以下多对一关系

<class name="Preference" table="PREFERENCE">
...
<many-to-one name="user" column="USER_ID" not-null="true"
foreign-key="ALLPREFERENCES" class="User"/>
...
</class>

由上可见,在User和Preference的关系树中,User是根(root),别的还可以看到为Preference声明了一个not- null的外键.在理清了级联的次序关系后,后续的长期化操作可以只对User举行便可,Preference的长期化由级联操作完成.

按照Hibernate的原理和官方倡议,应当采取以下长期化办法:

session.save():用于将Transient状况的对象及其级联对象长期化(即在该session中,处于persistent状况),比方,成立新对象及其关联.

session.flush()大概事件提交(commit)操作:用于将处于presistent状况的对象改正的长期化,比方,从数据库将一个关联树调到Hibernate中,改正后再次入库.

session.update(), session.saveOrUpdate(), session.merge():普通只用于处于detached状况的对象改正后举行的长期化操作(这是Hibernate的一个重要特点,可以很好的处理业务层面的事件(transaction)跟数据库层面的事件的配合问题),当然,这些办法用于上一种情形也没有错

session.delete():删除对象

做了上述实现后并不能保证关联关系的级联操作的精确履行,进一步解析拜见后续文章.

在实践中很简单触发以下非常:

org.hibernate.ObjectDeletedException: deleted object would be re-saved by cascade (remove deleted object from associations): xxx

这主如果理不清级联关系造成的,按照本文和下一文介绍的办法可以解除.

还有一个非常:

Cannot delete or update a parent row: a foreign key constraint fails ([外键的定义])

其办理办法也是一样的.


  以上是“在Hibernate中切切当现关联关系中的级联操作(cascading)[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
  • 在Hibernate里面动态切换SChema实现访谒差别的数据库的几种办法
  • 在Hibernate中动态切换Schema
  • 在Hibernate中检索战略的操纵详解
  • 在Hibernate中切切当现关联关系中的级联操作(cascading)
  • <b>在Hibernate中处理批量更新和批量删除</b>
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .