注册 登录  
 加关注
查看详情
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

Big-Time的博客

天行健,君子以自强不行。

 
 
 

日志

 
 
关于我

人生像攀登一座山,而找寻出路,却是一种学习的过程,我们应当在这过程中,学习稳定、冷静,学习如何从慌乱中找到生机。

inverse和cascade详解(转)  

2011-06-30 23:32:28|  分类: Java |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
在NHibernate的一对多关系中,有两个配置属性是比较容易混淆的,就是inverse跟cascade,在查看了一资料后大要明白
他们的关系,特写在这里做个记号,日后忘记时可以看看
在Article这一边写上配置信息
    <bag name="CommentList" table="Comment" inverse="true" lazy="true" cascade="all">
      <key column="ArticleID"></key>
      <one-to-many class="Blog.Module.Comment,Blog.Module"></one-to-many>
    </bag>
在评论这边写上配置
      <many-to-one name="ArticleInfo" column="ArticleID" not-null="false" ></many-to-one>   
运行下面代码
        articleInfo = new Blog.Module.Article("测试""测试", DateTime.Now, 11);
        Blog.Module.Comment comment 
= new Blog.Module.Comment("测试评论""测试评论", DateTime.Now, 1);
        articleInfo.CommentList 
= new ArrayList();
        articleInfo.CommentList.Add(comment);
        comment.ArticleInfo 
= articleInfo;
        article.Add(articleInfo);
运行通过,文章和评论正常添加
接着将Article方的inverse设为false,再次运行,也通过了,但是通过事件查看器发现这一次的SQL脚本多运行了一个
Update Comment set ArticleID=@Article 的脚本,为什么会这种区别呢,因为inverse的作用就是这两个表的对应关
系由哪一方来维护,默认值为false,设为true表示不维护,所当Article的inverse的属性设为true时,Article表就不维护
两者之间的关系了,所以在添加Article时会遍历CommentList查找未被持久化的类(是否被持久化是通过将Comment.Id
与Comment.hbm.xml里面的unsaved-value进行比较,相等时证实还未被持久化),然后更新到数据库,如果inverse设为
false时则表示Article添加完成必须维护这一个一对多的关系,所以会对刚才添加的评论类的外键进行更新,确认两者之间的
对应关系,所以说一般情况下one的那一方都会设置inverse=true,可以减少一些不必要的操作

而cascade比较好理解一点,就是表示级联操作的程度,也就是如果cascade设置为none的话,不管Article的inverse怎么设置,上面的代码运行都不会添加评论的
cascade能设置的值有
all                        相当save-update加上delete
all-delete-orphan   相当all,并且会删除去父类失去关联的子类比如说Article.CommentList.RemoveAt(0),就会删除第一个子类
none                    父类的操作不会关联到子类
save-update         添加和更新进行级联操作
delete                  删除父类时,删除子类
delete-orphan       删除父类时,删除父类没有关系的子类



delete删除父类时删除所有父类关联的子类,但是不包括CommentList.RemoveAt出去的子类,因为这样的子类表示撤消关系,但是 delete-orphan就会将整一个CommentList里面的子类删除,不管子类是否移除关系,因为移除关系的节点表示孤儿节点
  评论这张
 
阅读(401)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018