升级到 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),
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