hibernate配置级联删除

来源:互联网 发布:英语谐音软件 编辑:程序博客网 时间:2024/05/21 12:45

一个版本,绑定多个项目. StoneosVersionProject表用于配置版本与项目的关联关系。

版本对象的hibernate配置文件中设置一对多关系如下:

        <!--  版本和项目关系-->        <set name="statProjects" inverse="true" cascade="delete">            <key>                <column name="stoneos_version_id" />            </key>            <one-to-many class="htf.dbmgmt.filemanage.StoneosVersionProject" />        </set>

set节点的inverse和cascade不同配置下,hibernate的行为如下

1. inverse=true, cascade=delete
版本被删除,版本与项目的关联关系记录被删除

2. inverse=false, cascade=delete
版本被删除时,hibernate尝试置关联关系为当前版本的记录,版本字段为null. 当置位失败时,版本不能删除

3. inverse=false
同2

4. inverse=true
版本被删除,版本与项目关联关系记录未删除,未更新

5. cascade=delete
同2 (因为inverse默认为false)


总结:

Inverse:负责控制关系,默认为false,也就是关系的两端都能控制,但这样会造成一些问题,更新的时候会因为两端都控制关系,于是重复更新。一般来说有一端要设为true。

Cascade:负责控制关联对象的级联操作,包括更新、删除等,也就是说对一个对象进行更新、删除时,其它对象也受影响,比如我删除一个对象,那么跟它是多对一关系的对象也全部被删除。

0 0