关于Hibernate级联更新的一个问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于Hibernate级联更新的一个问题相关的知识,希望对你有一定的参考价值。

比如两个类Classes(教室),Student(学生)是一对多的关系。并且双向关联,而在Classes的hbm映射中包含Student的一个set有属性inverse=true和cascade=all。就是维护关系权在Student上,而且Classes对Student级联保存、更新、删除。而Student里面没有对Classes的级联操作。
如果Classes中有一个属性需要更新,然后调用了session.update(class);的方法进行更新。的确Classes是更新了,但是同样也把Classes关联的所有的Student更新了一次,比如Classes中有60个Student就多更新了60次。但是其实Student中是没有属性改动的。那多发出了这么多更新的SQL语句,肯定要影响性能,我想问问这应该怎么办呀。怎么才能在更新Classes时不级联更新Student呢?Classes必须要级联保存Student,但是不需要更新,应该怎么做啊?

参考技术A Classes的hbm映射包含Student的属性set

inverse=true
cascade=all

关系在Student上
而且Classes对Student级联保存、更新、删除

----------

Classes必须要级联保存Student, 但Student不要更新

----------

see?

then programm it....
参考技术B cascade=all

inverse=false本回答被提问者采纳

hibernate一对多单向关联时更新问题

需求:
修改一个联系人,为其重新分配客户

问题:
当更新一个托管态/持久态对象时,该对象关联了一个临时态对象,会报错

解决办法:
使用级联保存更新

要更新谁,就在谁的映射文件中配置

<!-- 一对多关系映射: 
set元素的属性:
    cascade:级联操作。
        取值:
            save-update:级联保存更新
            delete:级联删除。-->

<set name="linkmans" table="cst_linkman" cascade="save-update,delete" >
<key column="lkm_cust_id"></key>
<one-to-many class="CstLinkMan"/>
</set>

多对一关系映射:
many-to-one元素的属性:
cascade:级联操作
取值:save-update 级联保存更新

<many-to-one name="customer" class="CstCustomer"
column="lkm_cust_id" cascade="save-update" />

以上是关于关于Hibernate级联更新的一个问题的主要内容,如果未能解决你的问题,请参考以下文章

关于Hibernate级联更新插入信息时提示主键不为空的问题“org.hibernate.StaleStateException: Batch update returned unexpected r

Hibernate:OneToMany 通过级联保存孩子

hibernate级联更新外键问题

hibernate 3如何级联更新

hibernate一对多单向关联时更新问题

关于Hibernate的查询