最近发现一个问题,Session.Save(entity)时,如果entity是新实体(version字段为0,假设0为unsaved-value),则NHibernate执行的SQL除了应该出现的Insert语句之外,还有一个Update version字段设置其加一的Update语句。而此前Insert语句已经设置version字段值为一,所以此Update除了Update version字段为2外不Update任何其它字段,导致一条Insert语句最终version为2,且影响性能(在批量插入的时候影响明显,因为不在batchupdate的size控制之下)是无意义的一条语句。可以采用如下方式避免:

                    if (e.ObjectVersion == 0){e.ObjectVersion = 1;Session.Save(e);}elseSession.Update(e);

即ObjectVersion在Save之前手动设为1。需要指出的是,e, 即entity,在Save之前不从属于任何Session实例,即为Detached状态。

另外顺带一提,实体类的一些公共属性的实现代码写起来要小心。例如,假设有个基类Entity,有个属性ModifiedOn

        public virtual DateTime ModifiedOn{get{return DateTime.Now;}set{_modifiedOn = value;}}

如果这么写,就杯具了,因为所有通过Session加载的对象在Session中都会变成dirty的----因为ModifiedOn始终在变化,于是Session.Flush或者Trasaction.Commit的时候所有的对象都会Update...

转载于:https://www.cnblogs.com/damnedmoon/archive/2010/10/11/1848173.html

NHibernate: Session.Save 采用版本控制时无必要地自动Update版本字段的问题相关推荐

  1. spark项目实战:电商分析平台之各个范围Session步长、访问时长占比统计(需求一)

    spark项目实战:电商分析平台之各个范围Session步长.访问时长占比统计(需求一) 项目基本信息,架构,需要一览 各个范围Session步长.访问时长占比统计概述 各个范围Session步长.访 ...

  2. 小米笔记本电脑故障——USB口拷贝文件中断/电池在低温时无输出

    --USB口拷贝文件中断/电池在低温时无输出 本文主要叙述如何发现计算机故障,以及如何呈现.同时,也给网友传达如何正确与厂家交涉. 本电脑在2018年3月14日左右购买,在2018年9日前,给亲人使用 ...

  3. JPA踩坑记:Spring Data Jpa 更新为null的问题(save方法保存时null值会被更新到数据库)

    关键字: JPA更新为null,JPA save null,JPA保存为null 今天使用jpa的save方法时发现null字段也会被更新到数据库,这个直接把数据库数据覆盖的行为很可怕,果断研究了一下 ...

  4. ajax没返回响应数据,jQuery的Ajax时无响应数据的解决方法

    jQuery的Ajax时无响应数据的解决方法 复制代码 代码如下: $.ajax( { type: "POST", url: "/MemberComment.aspx/G ...

  5. 「SAP技术」SAP MM 批次管理的物料创建DN时无存储地点就不能输入批次值?

    「SAP技术」SAP MM 批次管理的物料创建DN时无存储地点就不能输入批次值? 1, 如下交货单80018169(SO#10002993),行项目里storage location为空,batch字 ...

  6. 时无英雄,使竖子成名!

    当年曹操身边曾有一个文才很好.深受信用的书记官叫阮瑀,生了个儿子叫阮籍.曹操去世时阮籍正好十岁,因此他注定了要面对"后英雄时期"的乱世,目睹那么多鲜血和头颅了,不幸他又充满了历史感 ...

  7. win7打开计算机无法最大化,如何解决win7开启远程功能时无法全屏

    在使用widow系统自带远程桌面时,总会遇到远程两端电脑分辨率不同的情况,也就造成了连接远程电脑后,屏幕显示很小,今天学习啦小编给大家介绍下如何解决win7开启远程功能时无法全屏吧. 解决win7开启 ...

  8. win10记事本编写html没反应,Win10记事本编辑时无响应假死怎么办

    不管是哪一个系统,记事本都是Windows中自带的一个小工具,我们可以进行简单的文字编辑,而很多人升级到win10系统之后,反映说打开记事本编辑的时候遇到无响应假死的情况,如果有编辑了很多文字的话,要 ...

  9. win10记事本编写html没反应,Win10记事本编辑时无响应假死解决方法(图)

    原标题:"Win10记事本编辑时无响应假死怎么办"相关电脑问题教程分享. - 来源:191路由网. 不管是哪一个系统,记事本都是Windows中自带的一个小工具,我们可以进行简单的 ...

最新文章

  1. Linux redis安装教程,Linux 下redis5.0.0安装教程详解
  2. 1.11.Flink DataSetAPI、DataSet API之Data Sources、DataSet API之Transformations、DataSet Sink部分详解
  3. Android RecyclerView 使用完全解析 体验艺术般的控件
  4. 一个程序员的爱情故事
  5. Java IO: 其他字符流(下)
  6. 【NOIP 模拟赛】 道路
  7. 分享一种中小企业的文件服务器方案
  8. js中使用new Date(str)创建时间对象不兼容firefox和ie的解决方式
  9. java colormodel_ColorModel
  10. lua笔记之userdata
  11. 07. 千万不要重载、||和, 操作符
  12. Python:Lasso方法、GM预测模型、神经网络预测模型之财政收入影响因素分析及预测...
  13. 金九银十北漂记第3篇:再见,中国航信!
  14. part-1 输入偏置电流和输入失调电流
  15. hive 数据类型 java_Hive数据类型
  16. quartus 13.0 网络盛传的破解方法勘误(网传大多数破解步骤有误)
  17. python如何实现接口?
  18. 高版本Andriod Studio集成HMS环境看这篇就够了(附加步骤多图、资源下载、源代码、问题总结)
  19. 跟我一起学习Windows Store的开发(1):如何创建WindowsStore的应用程序
  20. 一次zabbix连接不上mysql数据库的经历

热门文章

  1. linux7虚拟机修改主机名,centos 7 更改网卡名,主机名,虚拟机添加网卡
  2. 数字基带传输与码间干扰
  3. android 打卡动画,android音视频打卡(-)3种方法绘制图片
  4. php mysql什么意思_php MySQLi是什么意思?
  5. 示波器触发模式及其使用
  6. Atutor、 Claroline、 Moddle及Sakai号称为四大开源课程管理系统
  7. spyder画图窗口浮动
  8. Python基础 2
  9. mysql权限的误操作的恢复
  10. protobuf 2.5.0 编译jar