nhibernate inverse总结

最近关注了一下nhibernate的inverse属性,网上各种资料众说纷纭,但是感觉多少有点差入,这里总结下自己实践所得结论

inverse的真正作用就是指定由哪一方来维护之间的关联关系。当一方中指定了“inverse=false”(默认),那么那一方就有责任负责之间的关联关系,说白了就是hibernate如何生成Sql来维护关联的记录! 

在one to many的默认配置中,是由one放来维护关系,步骤:insert one ->insert many -> update many foreign key。

如果inverse设置为true,步骤 insert one ->insert many,这种情况下双方维护关系是交由many端的,所以需要many端在保存之前需要有one的引用,这样才能保证外键不为空

many to many 同理

由于inverse默认状态下会多一步更新,所以应该使用inverse=true来映射关系

时间: 2024-10-31 20:49:01

nhibernate inverse总结的相关文章

使用NHibernate(10) -- 补充(inverse && cascade)

1,inverse属性的作用: 只有集合标记(set/map/list/array/bag)才有invers属性: 以set为例,set的inverse属性决定是否把对set的改动反应到数据库中去,inverse=false(反应),inverse=true(不反应):默认值是false; one-to-many 和many-to-many都适用: inverse等于false时,对于one-to-many,如果删除"一"方,NH会先执行Update语句来把"多"方

NHibernate官方文档中文版--基础ORM(Basic O/R Mapping)

映射声明 对象/关系映射在XML文件中配置.mapping文件这样设计是为了使它可读性强并且可修改.mapping语言是以对象为中心,意味着mapping是围绕着持久化类声明来建立的,而不是围绕数据表. 要注意的是,尽管很多NHibernate使用者选择手动定义XML文件,但是仍然有很多工具可以用来生成mapping文件,包括NHibernate.Mapping.Attributes 库和各种各样基于模板的代码生成工具(CodeSmith, MyGeneration). 让我们用一个mappin

[NHibernate]立即加载

目录 写在前面 文档与系列文章 立即加载 一个例子 总结 写在前面 上篇文章介绍了nhibernate延迟加载的相关内容,简单回顾一下延迟加载,就是需要的时候再去加载,需要的时候再向数据库发出sql指令进行查询. 本篇文章介绍的立即加载,则和延迟加载相对,举个简单的例子,就是查询客户信息,则会将该客户相关联的数据立即进行加载.实现立即加载的方式有三种:设置映射文件中节点的可选属性lazy,Nhibernate提供的实用类,HQL抓取策略. 文档与系列文章 [Nhibernate]体系结构 [NH

Nhibernate中一对多映射——双向关联

上一篇博客中提到的是单向关联:Nhibernate一对多映射--单向关联.这篇说说双向关联. 双向关联和单向关联的区别是:两边都能维护关系,如我查询两边的任何一边,另外一边的信息也能查询出来,其他的修改删除只要设置了,也都可以.体现在代码中是:因为上篇单向关联是在DictionaryEntity上,所以变为双向关联要在DictionTypeEntity和他对应的xml文件中加上关联映射. DictionaryEntity修改为: #region 实体属性 /// <summary> /// 类

Nhibernate一对多映射

在Nhibernate中,映射文件对应数据库表中的关系,所有Nhibernate中也有一对一映射.一对多映射和多对多映射.首先,看看一对多映射,一对多映射就是数据库中两表的关系是一对多的关系,例如:学生和班级的关系,就是一对多的关系,一个班级有多个学生,一个学生只属于一个班级;字典类型和字典表也是一对多的关系.用字典类型和字典表做实例: 一对多关联映射有单向和双向之分,单向表示在一边维护他们的关系,双向表示在两边都要维护关系.首先看下单向一对多关联映射. 字典类型DictionTypeEntit

NHibernate系列文章二十一:延迟加载

摘要 NHibernate的延迟加载机制是很重要的内容.通过关系映射将数据库表之间的关系映射成对象之间的关系,如果没有延迟加载机制,从主表的一个对象的查询将直接查询出所有与该对象关联的其他对象,如果关联的对象上还有其他的关联对象,还要去查询其他的对象.如果这张“网”非常大,或者关联的数据库记录非常多的话,每次查询主表记录都要把整个数据库都查询一遍,这样效率会非常低下.为了解决这个问题产生了NHibernate延迟加载.对一些属性设置延迟加载,只在对象访问到这些属性的时候才去查询数据库,很大程度上

NHibernate可视化设计插件——Mindscape.NHibernateModelDesigner

我一直希望NHibernate能够支持像EF一样支持可视化操作,今天去网上搜了一下,发现有一个插件,类似EF的可视化功能. 下载地址:Mindscape.NHibernateModelDesigner_crack.vsix 下载后,运行Mindscape.NHibernateModelDesigner_crack.vsix,进行安装,安装完成之后,在新建项目的时候,就会发现多了如下模版: 用过EF的朋友应该很熟悉,这个界面就跟EF的可视化界面非常相似了. 打开服务器资源管理器,然后连接到Nort

Nhibernate 一对多 与 一对一

上来园子就看到些标题党,觉着气氛怪怪的,为什么不是专注在自己感兴趣的领域呢. 在开发过程中使用nhibernate的时候会遇到一对一与一对多的关系,这里记下来方便自己也方便别人查看,希望遇到同样问题的同学少走弯路,能把更多精力放在业务逻辑上,需要的同学自己采用,有建议可以提. 现在关系是这样的,用户基本表一张,里面存储着用户的一些基本信息:用户扩展表一张,里面存储着用户的扩展信息比如用户偏好,生日(这些至于为什么不是放在一起每个人有自己的想法),用户消费记录表一张记录了消费信息.第一步新建用户类

NHibernate的常见问题及解决方案

问题1 : 异常:in expected: <end-of-text> (possibly an invalid or unmapped class name was used in the query) [from Customer] 解决方案:查看HQL语句查询的是否是实体类,映射文件属性是否正确:复制到输出目录à始终复制 ..生成操作à嵌入的资源. 问题2: 异常:缺少必需的属性“name”. 解决方案:查看映射文件里,是否哪个<property>节点缺少name属性 问题3