Spiga

NHibernate 2.0.0 Alpha 1 悄悄地发布了

2008-03-31 17:11 by 李永京, 6005 visits, 收藏, 编辑

NHibernate源于非常优秀的基于Java的Hibernate关系型持久化工具。可是从2007年11月26日发布的1.2.1GA版本不是很好的支持VS2008。今天负责NHibernate开发的Ayende Rahien发布了NHibernate 2.0.0 Alpha 1,我们可以从这里下载,相信不久正式版会更好,先下载尝鲜一下。

下面列表列出了一些改进:

新特性

  • 增加了一个类映射到多张表的联接映射元素
  • 表和继承策略
  • 针对PostgreSQL dialect的HQL函数‘current_timestamp’,‘str’和‘locate’
  • VetoInterceptor - 通过IInterceptor接口取消删除、更新、插入的调用
  • 在HQL查询语句中使用常量
  • 增加NHibernate使用一个鉴别器对每个子类一张表的支持
  • 增加对子查询的分页支持
  • 在自定义的SQL查询里的自动类型发现
  • 增加了 OnPreLoad和OnPostLoad生命周期事件
  • 增加了 ThreadStaticSessionContext
  • 增加了 标记to
  • 增加了 foreign-key="none",虽然父表不具备not-found="ignore"。(这和SQL Server不相干)
  • 增加了 DetachedQuery
  • ExecuteUpdate支持原生的SQL查询
  • 来自Hibernate的特性:
    • 移植了 Actions, Events和Listeners
    • 移植了 StatelessSession
    • 移植了 CacheMode
    • 移植了 Statistics
    • 移植了 QueryPlan
    • 移植了 ResultSetWrapper
    • 移植了 Structured/Unstructured cache
    • 移植了 SchemaUpdate
    • 移植了 Hibernate.UserTypes
    • 移植了 Hibernate.Mapping
    • 移植了 Hibernate.Type
    • 移植了 EntityKey
    • 移植了 CollectionKey
    • 移植了 TypedValue
    • 移植了 SQLExceptionConverter
    • 移植了 Session Context
    • 移植了 CascadingAction

重大变化:

  • NHibernate.Expression命名空间更改为NHibernate.Criterion
  • NHibernate.Property命名空间更改为NHibernate.Properties
  • 没有事务外的AutoFlush -- 数据库事务不是可选的,数据库的所有通信都有一个事务,不管是读还是写数据
  • 将忽略配置节,使用配置节代替(注意它们有不同的XML格式)
  • 配置值不再需要前缀“hibernate.”,如果你以前指定“hibernate.dialect“,现在只要使用".dialect”
  • 接口修改-IItnterceptor更改为匹配Hibernate 3.2的Interceptor
  • 对所有的命名查询在初始化的时候执行验证,任何无效的查询会抛出异常
  • NHibernate在SQL Server上查询count(*)返回是长整形(long)
  • SaveOrUpdateCopy返回一个新的实体实例,不会更改原始实体
  • 修改了接口INamingStrategy
  • NHiberate.Search -Index/Store属性移到了Attributes命名空间
  • 修改了IType、IEntityPersister、IVersionType -- 对此感兴趣的可能只是对NHibernate疯狂热爱的人
  • 需要的时候必须包含括号
  • 修改了接口IBatcher

修复的缺陷:

  • 修复了HQL查询的表达式映射
  • 修复了里面有一个 ;里面有一个 导致的异常
  • 不支持限制大小的SQL dialects不支持多条件分页
  • 修复了MsSql2005 dialect在多个处理器的计算机上有限制的字符串排序不正确的问题
  • 修复了当在另一个子表达式中使用SimpleSubqueryExpression时得到的是NullReferenceException的问题。
  • 修复了当删除一个包含空值的对象时引发的空引用异常
  • 修复了在复杂联接表的重复列名
  • 修复了MultiQuery在所有的查询强制使用参数
  • 修复了当参数包含一个逗号和使用MaxResults时concat函数不能正常工作
  • 修复了在MSSQL 2005 dialect 使用表达式分页不能正常工作
  • 修复了OersustebtEnumType不正确的处理具有零值定义的枚举
  • 修复了当没有使用SetFirstResult()时SetMaxResults()返回至少一行
  • 修复了在SQL Server 2005的GetLimitSring 使用总计排序的缺陷
  • 修复了SessionImpl.EnableFilter当已经启用的时候返回错误的过滤器
  • 修复了Generated Id不能用于MySQL
  • 修复了一对一不能延迟加载
  • 修复了不会生成悲观锁定的FOR UPDATE语句

改进:

  • Postgre Dialect增加对Guid的支持
  • 查询语句中支持注释
  • ISession增加了Merge和Persist
  • SQL Server支持IFF
  • IdBag现在支持Identity列
  • 多条件(Criteria)现在使用结果转换器
  • 处理key-many-to-one 键和找不到资源
  • 可以在映射中指定抽象类

指南:

  • 选择使用Restrictions而不是Expression类来定义Criteria查询。

子项目:

  • 增加了NHibernate.Validator
  • 增加了NHibernate.Shards
  • NHibernate.Search更新到和Hibernate Search 3.0相匹配

条件API:

  • 允许检查、遍历、克隆和转换ICriteria以及DetachedCriteria
    • 引入CriteriaTransformer 类
    • GetCriteriaByPath、GetCriteriaByAlias
  • 增加了DetachedCriteria.For
  • 增加了多条件
  • Projections现在可以将参数传递到生成的SQL语句。
  • 增加了从Criteria中调用(HQL概念的)Sql函数的支持
  • 增加了ConstantProjection
  • 增加了CastProjection
  • 能够使用IProjection作为ICriterion的参数

代理验证的支持更好:

  • 现在支持internal字段的检查
  • 更新了Castle.DynamicProxy2.dll,更好的支持.NET 2.0 SP1

SQL Lite:

  • 支持多查询和多条件
  • 支持子查询和limits
  • 允许DROP TABLE IF EXISTS语句

PostgreSQL (Npgsql):

  • 启用PostgreSQL的多查询支持

FireBird:

  • 更好的全面支持

批处理:

  • 更改了日志记录使其更清晰的表达所有的命令在单个批处理被发送到数据库。
  • AbstractBatcher现在使用侦听器,允许用户在准备好之前拦截和修改SQL。

错误处理:

  • 在获取Int32Type中的值异常的更友好错误信息
  • 当使用的子查询中包含一个不存在的属性时的更友好的错误信息
  • 当带一个值类型调用UniqueResult()和查询返回null时抛出更有意义的异常
  • 整体上更好的错误处理
  • 更友好的调试日志

重构:

  • 在框架内部的重要重构使用了泛型集合类代替非泛型的集合性。
  • 对配置系统和hbm文件的解析进行了重要重构。

工厂:

  • 增加了ProxyFactoryFactory
  • 增加了BatchingBatcherFactory
标签: NHibernate
Add your comment

39 条回复

  1. #1楼 Anders Cui      2008-03-31 17:21
    好消息!
     回复 引用 查看   
  2. #2楼 RicCC      2008-03-31 17:38
    不错,添加不少比较重要的特性
     回复 引用 查看   
  3. #3楼[楼主] 李永京      2008-03-31 17:38
    @Anders Cui
    呵呵,第一时间知道,就写篇文章发到首页了,把这消息分享给更多的人!
     回复 引用 查看   
  4. #4楼[楼主] 李永京      2008-03-31 17:40
    @RicCC
    是的啊,我想到正式版会更出色,可以同LINQ同媲美了。或许比LINQ更好!
     回复 引用 查看   
  5. #5楼 RicCC      2008-03-31 17:51
    @李永京
    NH跟LINQ不太好比较的,要说是用方便上如果NH能将hibernate3的HQL实现早点导入过来可能会更好
    官方的特性列表里面说2.0会提供LINQ支持,文章的列表里面好像没有,是这个Alpha版本还没有实现吗
     回复 引用 查看   
  6. #6楼 生鱼片      2008-03-31 17:51
    不知道LINQ,NHibernate有什么区别,有了LINQ,不知道 NHibernate的路会怎么样?
     回复 引用 查看   
  7. #7楼[楼主] 李永京      2008-03-31 17:59
    @RicCC
    都是ORM。LINQ有LINQ to SQL,NHibernate有NHibernate to LINQ。比较的是效率,开发速率等等了。
     回复 引用 查看   
  8. #8楼[楼主] 李永京      2008-03-31 18:00
    @生鱼片
    呵呵,这就要看NHibernate开发的情况了,不过从过去看来,一直是挺优秀的!
     回复 引用 查看   
  9. #9楼[楼主] 李永京      2008-03-31 18:05
    @RicCC
    是啊,看似没有LINQ支持,晚上看看源代码。。。
     回复 引用 查看   
  10. #10楼 Zhongkeruanjian      2008-03-31 18:28
    是啊,支持NH
     回复 引用 查看   
  11. #11楼 代码乱了      2008-03-31 18:28
    HQL 上的变化不小啊。呵呵
     回复 引用 查看   
  12. #12楼[楼主] 李永京      2008-03-31 19:07
    @代码乱了
    确实!正式版我想更强大了
     回复 引用 查看   
  13. #13楼 brightwang      2008-03-31 19:13
    关注啊,现在的项目用的就是NH,希望能达到在JAVA世界里的水平
     回复 引用 查看   
  14. #14楼[楼主] 李永京      2008-03-31 19:19
    @brightwang
    呵呵,用VS2008体验一把!
     回复 引用 查看   
  15. #15楼 黎波      2008-03-31 21:47
    期待!
     回复 引用 查看   
  16. #16楼 Kevin Li      2008-03-31 21:59
    光一下
     回复 引用 查看   
  17. #17楼[楼主] 李永京      2008-03-31 22:04
    @黎波
    o(∩_∩)o...
     回复 引用 查看   
  18. #18楼[楼主] 李永京      2008-03-31 22:06
    @Kevin Li
    光顾一下??o(∩_∩)o...
     回复 引用 查看   
  19. #19楼 Leem      2008-04-01 00:07
    2008写的?难道这个版本必须要有framework 3以上支持?
     回复 引用 查看   
  20. #20楼 Jeffrey Zhao      2008-04-01 03:32
    不是已经有人在做LINQ to NHibernate了吗?
     回复 引用 查看   
  21. #21楼 冰隼      2008-04-01 09:24
    关注,现在还在用1.2.0。如果Release了,会考虑迁移的。
     回复 引用 查看   
  22. #22楼 caodaiming[未注册用户]2008-04-01 09:45
    有没有NStruts啊,这个也可以啊,在小公司也可以快速的开发啊,对了其是MVC就可以说成是NStruts啊,
     回复 引用   
  23. #23楼 小瑞克      2008-04-01 11:08
    我觉得这个东西很麻烦,好多配置文件,大概用codesmith生成比较方便,可惜偶不会。。。。
     回复 引用 查看   
  24. #24楼[楼主] 李永京      2008-04-01 12:08
    @Leem
    不需要,只是把代码移植到2008上的,大多数还有2005项目。
     回复 引用 查看   
  25. #25楼[楼主] 李永京      2008-04-01 12:13
    @Jeffrey Zhao
    就是,有了。好像也是他做的。
    http://www.ayende.com/Blog/archive/2007/03/17/Implementing-Linq-for-NHibernate-A-How-To-Guide--Part.aspx
     回复 引用 查看   
  26. #26楼[楼主] 李永京      2008-04-01 12:14
    @小瑞克
    配置是有些麻烦。以后我试试模板
     回复 引用 查看   
  27. #27楼[楼主] 李永京      2008-04-01 12:15
    @caodaiming
    不清楚这个,观望中~~~
     回复 引用 查看   
  28. #28楼[楼主] 李永京      2008-04-01 12:15
    @冰隼
    现在体验一下!到正式版相信会更加出色!
     回复 引用 查看   
  29. #29楼 昊子      2008-06-26 00:07
    无法访问sourceforge,其他人有没有出现过这个问题
     回复 引用 查看   
  30. #30楼[楼主] 李永京      2008-06-26 00:24
    @昊子
    经过月光对路由的测试,经过电信骨干网的某个路由器时,访问被阻拦,因此相信这是电信的所为,中国电信对于专业技术类型网站的屏蔽令人感到不解,上一次的误封还是发生在2006年,这一次不知道又是为了什么原因。
    当然,希望SourceForge的无法访问不是因为这个项目的问题,然而不可否认的是,对于SourceForge这样一个庞大的软件开源项目的屏蔽,会对中国的软件发展产生严重的阻碍,影响中国的科技发展和进步。
     回复 引用 查看   
  31. #31楼 昊子      2008-06-27 01:02
    另外发现hibernate.org本身对NH的文档不很重视,下载链接也还是1.2 GA,完全没有提到2.0 beta。

    不知道是不是可以理解为NH本身没有团队支持
     回复 引用 查看   
  32. #32楼[楼主] 李永京      2008-06-27 14:15
    @昊子
    这是测试版的,内部测试的,我想到正式版之后才可以公开发布的。
     回复 引用 查看   
  33. #33楼 gakaki[未注册用户]2008-07-01 09:05
    有 必要开一个Nhiberate Sample
    专题 每个特性都值得介绍
     回复 引用   
  34. #34楼[楼主] 李永京      2008-07-01 09:24
    @gakaki
    不必了吧,这些特性只有在使用过程中才能慢慢体会。
     回复 引用 查看   
  35. #35楼 毁于随      2008-07-04 13:29
    我有一个问题不清楚,也是我值不值得研究它的一个主要的问题,比如A类与B类关联,B类与C类关联.如果在不采用延迟加载的时候,如果要一起把这相关的三个类都加载了,是用一个SQL语句(使用关联),还是要使用三条语句加载(如果是1对多的关系,那调用的次数要呈几何级增加)?我还没有研究NHibernate,希望楼主能给我讲解一下,谢谢.
     回复 引用 查看   
  36. #36楼 piaoxue[未注册用户]2008-07-06 13:09
    to 35楼

    建议你先看看书,孙卫琴的 精通hibernate。

    aspx@hotmail.com
     回复 引用   
  37. #37楼 毁于随      2008-07-07 08:32
    就是没有什么时间看书,所以才来请教的.
     回复 引用 查看   
  38. #38楼[楼主] 李永京      2008-07-11 20:51
    @piaoxue
    谢谢你的回复,一直没有时间上网
     回复 引用 查看   
  39. #39楼[楼主] 李永京      2008-07-11 20:54
    @毁于随
    你可以先看看源码中的例子,可以很快入门/这个问题在NH中可以很好的解决。提供了映射关系支持/
     回复 引用 查看   
发表评论

昵称: [登录] [注册]

主页:

邮箱:(仅博主可见)

评论内容:

  登录  注册

[使用Ctrl+Enter键快速提交评论]

0 1131475 TsJh0N7fVAU=