hibernate的级联、延迟加载、inverse属性

来源:互联网 发布:在淘宝开网店赚钱吗 编辑:程序博客网 时间:2024/05/16 17:01

          hibernate的级联是用来说明数据库中二个表之间的相互关系(one---to ---one, one ---to---many, many---to---many)。当对主对象做某种操作时,是否对其相关联的子对象也做相对应的操作。

常见的级联(cascade)有:

(1) none: 表示在保存、修改、删除时不对其级联对象不做任何的操作,它是默认值。

(2)save-update:表示在保存和更新时,级联保存、更新附属对象。

(3)delete:表示在删除当前对象时,级联删除附属对象。

(4)all:表示所有情况下均进行级联操作,比如:save-update, delete操作等。

(5)delete--orphan: 表示删除当前对象的同时,删除与当前对象解除关系的孤儿对象。(仅限于用在一对多上面。)

 

        hibernate的延迟加载(Lazy  load):这种技术被广泛的运用,这种延迟加载能够保证应用只有在需要的时候才去数据库抓取相应的数据记录,通过延迟加载技术能够避免过多,过早的加载数据库表中的数据,从而减少应用内存的开销。hibernate的延迟加载实质上是一个代理模式的运用,当程序通过hibernate装载一个实体时,默认情况下hibernate不会马上去抓取它的集合属性、关联实体所对应的记录。而是通过一个代理来生成这些集合属性,和关联实体,这就是代理的优势。

例如: 在一个级联关系:部门-----员工(one---many)的表中,当进行一些操作时,要想优化它的性能就把lazy设为true。

 

        hibernate的inverse属性:Inverse是双向关系中的基本概念,当然对于多数实体我们并不需要双向关联,更多的是选择单项关联。inverse的使用或设置不当会导致性能的下降,既会产生多余的sql,甚至会有jdbc异常产生。例如:在双向关联当中,如果双放inverse都设置为true,那么双方将都不会维护关系的更新,如果双方inverse都设置为false的话,必然后导致双方维护同一个关系。所以双向关联中,最好一端inverse=true,一端inverse=fase。一般情况下会把inverse=fase放在many端。

原创粉丝点击