目录
- 映射声明(Mapping declaration)
- Schema
- hibernate-mapping
- class
- id
- 联合ID(composite-id)
- 识别器(discriminator)
- 版本(version)(可选)
- 时间戳(timestamp )(可选)
- property
- 多对一(many-to-one)
- 一对一(one-to-one)
- 组件(component)
- 子类(subclass)
- 连接的子类(joined-subclass)
- map, set, list, bag
- 引用(import)
- NHibernate的类型
- 实体(Entities)和值(values)
- 基本值类型
- 自定义值类型
- 映射到"任意"(any)类型
- SQL中引号包围的标识符
- 映射文件的模块化(Modular mapping files)
对象和关系数据库之间的映射是用一个XML文档(XML document)来定义的。这个映射文档被设计为易读的,并且可以手工修改。映射语言是以.NET为中心的,意味着映射是按照持久化类的定义来创建的,而非表的定义。
请注意,虽然很多Hibernate用户选择手工定义XML映射文档,也有一些工具来生成映射文档,包括XDoclet,Middlegen和AndroMDA.
译者注:这里是NHibernate文档中一处没有从Hibernate文档中转换过来的部分,NHibernate中并没有像XDoclet,Middlegen和AndroMDA这样的工具,我一般会采用MyGeneration这样的代码生成工具来生成XML配置文档。
让我们从一个映射的例子开始:
<?xml version="1.0" ?> <hibernate-mapping xmlns="urn:nhibernate-mapping-2.0" namespace="Eg" assembly="Eg"> <class name="Cat" table="CATS" discriminator-value="C"> <id name="Id" column="uid" type="Int64"> <generator class="hilo"/> </id> <discriminator column="subclass" type="Char"/> <property name="Birthdate" type="Date"/> <property name="Color" not-null="true"/> <property name="Sex" not-null="true" update="false"/> <property name="Weight"/> <many-to-one name="Mate" column="mate_id"/> <set name="Kittens"> <key column="mother_id"/> <one-to-many class="Cat"/> </set> <subclass name="DomesticCat" discriminator-value="D"> <property name="Name" type="String"/> </subclass> </class> <class name="Dog"> <!-- mapping for Dog could go here --> </class> </hibernate-mapping>
我们现在开始讨论映射文档的内容。我们只描述NHibernate在运行时用到的文档元素和属性。映射文档还包括一些额外的可选属性和元素,它们在使用schema导出工具的时候会影响导出的数据库schema结果。(比如, not-null
属性。)