水丝游云

跌倒了?就顺便看看绽放着蔚蓝色微笑的天空吧!
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

NHibernate的批量更新/删除

Posted on 2005-11-30 15:22  水丝游云  阅读(4560)  评论(3编辑  收藏  举报

    刚开始学ORM的时候用的是听棠 的spl,一个很好用的工具,可是有一个问题,就是它是不开源的,后来考虑再三还是放弃在项目中使用.现在改用NHibernate,开源而且也并不比SPL难用多少.
     软件总没有完美的,NHibernate当然也有他的缺点.今天就发现了他在批处理上的问题!
在SPL中可以用DeleteCriteria来批量的删除,功能就象sql的delete table where id=1 ,一个很方便的功能(还是很怀念SPL,确实很方便).在NHibernate中有 ISession.Delete来完成相似的功能,由于ISession.Delete的帮助很简单,于是就去JAVA的论坛找了写Hibernate的资料来看.了解到Hibernate中的ISession.Delete的方法是先获取满足条件的对象,然后再删除,详细资料可以看这里,.再看NHiberante,它是从Hibernate而来,那么ISession.Delete的实现方法也应该和Hibernate相似,那也就意味着批量处理的时候依然需要SQL的帮忙(不知道NHibernate是不是改进了批量的处理方法,可是资料还是太少了).还好当初用NHibernate的时候就没有想它能让我一句SQL都不写,不然就郁闷了.
     在那篇Hibernate文章中谈到了" select只读操作和insert,delete,update这些数据库修改操作在速度上有一个以上的数量级的差距 "," Hibernate批量更新和删除效率并非传说中的那么差,只要优化的好,速度也非常快 ".而且建议可以用SQL就用SQL来实现批量的处理.而我觉得如果数据量小的话,可以不必写SQL,毕竟写SQL就意味着我们违背了当初我们使用ORM的目的了!