一个版本,绑定多个项目. 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:负责控制关联对象的级联操作,包括更新、删除等,也就是说对一个对象进行更新、删除时,其它对象也受影响,比如我删除一个对象,那么跟它是多对一关系的对象也全部被删除。