升级到 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
《持续。。。》