您的位置:首页 > 其它

hibernate令人费解的inverse配置

2009-04-28 10:57 99 查看
在我学习Hibernate的过程中发现在配置inverse的配置一直是个比较难理解的点,其实很多书上

都有关于inverse的介绍,但是就我看过的这些书而言,我不禁怀疑有些作者自己是不是也真正理解了

inverse的含义和配置。在《深入浅出hibernate》这本书里对inverse是这样解释的:注意术语inverse,

这里直译为“反转”,在hibernate语义中,inverse指定了关联关系中的方向,关联关系中,

inverse=false的为主动方,由主动方负责维护关联关系。这段话本身并没有错,但是我怎么看怎么觉得

找不着北,首先主动方是什么,是某个实体还是这个实体包含的集合?如果是实体的话inverse只是配置

集合时的一个属性,并不是配置这个实体的属性。如果是集合,集合本身是实体的一个属性,我们对这个

属性的访问都要通过实体的get方法,那么这个主动方的名字赋给集合真的合适吗?

最近开始看hibernate的官方文档,对inverse有一段200来字的介绍,看完以后再结合以前的理

解竟有一种豁然开朗的感觉,这段话有一句是这样的:把关联的一端设置为inverse将告诉hibernate忽略

关联的这一端,把这端看成是另外一端的一个镜像。这里的这端和另外一端指的都是维护了实体间关系的

集合(在多对多中,在多对一中也是类似的)。在双向多对多关系中,实体间的关联关系由每个实体的集

合来共同表示或维护,当一个实体的集合被设置为inverse=true时就表示这个集合只是与之相关联的实体

的集合的一个镜像或者说一个影子(相当于数据库里的表和视图的关系),对这个集合的修改所带来的实

体间关系(这里的实体间的关系和表之间的关系是不同的概念)的变化不会被hibernate自动维护到数据

库中去(相当于把控制权交给对方,这里用控制反转来理解倒是挺合情景的),相反inverse=false则会

被维护到数据库中。当然在其他关系中也是类似的。

由此也得一感悟,对于开源框架的学习,与其看各种不同的书还不如就拿来官方的文档反复的看,认真

仔细的琢磨字里行间的意思来的深刻正确有效。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: