NHibernate 3.2.0-GA Breaking Changes

升级到 NH3.2后,逐步发现很多Breaking changes, 而且是没有在官方文档中记录的。因此此处记录如下:

(原文链接 http://ddbiz.com/?p=104)

[ NH3.2.0 BC.01 Guid的映射发生变化 ]

先看下面的映射:

<?xml version="1.0"?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" default-lazy="true">
  <class name="ddbiz.nhtest.core.domain.member.TUser, ddbiz.nhtest"
        table="tuser"
         dynamic-update="true"
         dynamic-insert="true"
           >

    <id name="Id" column="Id" type="Guid" unsaved-value="00000000-0000-0000-0000-000000000000">
      <generator class="guid" />
    </id>
    <property name="Account" type="String(64)" column="Account" unique-key="uk_user_Account" />

在NH2.1.2中(包括以前的版本),如上定义的Guid是被映射为 varchar(40)的:

NHibernate.Cfg.XmlHbmBinding.Binder - Mapping class: ddbiz.nhtest.core.domain.member.TUser -> tuser
NHibernate.Cfg.XmlHbmBinding.Binder - Mapped property: Id -> Id, type: Guid
NHibernate.Cfg.XmlHbmBinding.Binder - Mapped property: Account -> Account, type: String

    create table tuser (
       Id VARCHAR(40) not null,
       Account VARCHAR(64),       
而在NH3.2.0-GA中,这个映射变为Binary(16):

NHibernate.Cfg.XmlHbmBinding.Binder - Mapping class: ddbiz.nhtest.core.domain.member.TUser -> tuser
NHibernate.Cfg.XmlHbmBinding.Binder - Mapped property: Id -> Id, type: Guid
NHibernate.Cfg.XmlHbmBinding.Binder - Mapped property: Account -> Account, type: String

create table tuser (
       Id BINARY(16) not null,
       Account VARCHAR(64),

官方记录的releasenotes如是说:

Build 3.0.0.Alpha1 (rev5056)
=============================
** Improvement
    * [NH-1248] - Check if result of Subquery is null with Criteria API
    * [NH-1838] - Guid support in MySql dialect


这个改变将影响到你正在使用中的系统。 Guid映射为 Binary(16)是在 MySQL5Dialect 中实现的,可惜的是它使用的还是 select uuid() 返回字符串,然后赋值给 binary(16),这样就会造成错误,估计没有写完,更别说测试了。所以我们可以使用 MySQLDialect,这个应该说还是能用的

《持续。。。》
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值