20.1.1. 对schema定制化(Customizing the schema)

很多Hibernate映射元素定义了可选的lengthprecision 或者 scale属性。你可以通过这个属性设置字段的长度、精度、小数点位数。

  1. <property name="zip" length="5"/>
  1. <property name="balance" precision="12" scale="2"/>

有些tag还接受not-null属性(用来在表字段上生成NOT NULL约束)和unique属性(用来在表字段上生成UNIQUE约束)。

  1. <many-to-one name="bar" column="barId" not-null="true"/>
  1. <element column="serialNumber" type="long" not-null="true" unique="true"/>

unique-key属性可以对成组的字段指定一个唯一键约束(unique key constraint)。目前,unique-key属性指定的值在生成DDL时并不会被当作这个约束的名字,它们只是在用来在映射文件内部用作区分的。

  1. <many-to-one name="org" column="orgId" unique-key="OrgEmployeeId"/>
  2. <property name="employeeId" unique-key="OrgEmployee"/>

index属性会用对应的字段(一个或多个)生成一个index,它指出了这个index的名字。如果多个字段对应的index名字相同,就会生成包含这些字段的index。

  1. <property name="lastName" index="CustName"/>
  2. <property name="firstName" index="CustName"/>

foreign-key属性可以用来覆盖任何生成的外键约束的名字。

  1. <many-to-one name="bar" column="barId" foreign-key="FKFooBar"/>

很多映射元素还接受&lt;column&gt;子元素。这在定义跨越多字段的类型时特别有用。

  1. <property name="name" type="my.customtypes.Name"/>
  2. <column name="last" not-null="true" index="bar_idx" length="30"/>
  3. <column name="first" not-null="true" index="bar_idx" length="20"/>
  4. <column name="initial"/>
  5. </property>

default属性为字段指定一个默认值 (在保存被映射的类的新实例之前,你应该将同样的值赋于对应的属性)。

  1. <property name="credits" type="integer" insert="false">
  2. <column name="credits" default="10"/>
  3. </property>
  1. <version name="version" type="integer" insert="false">
  2. <column name="version" default="0"/>
  3. </property>

sql-type属性允许用户覆盖默认的Hibernate类型到SQL数据类型的映射。

  1. <property name="balance" type="float">
  2. <column name="balance" sql-type="decimal(13,3)"/>
  3. </property>

check属性允许用户指定一个约束检查。

  1. <property name="foo" type="integer">
  2. <column name="foo" check="foo > 10"/>
  3. </property>
  1. <class name="Foo" table="foos" check="bar < 100.0">
  2. ...
  3. <property name="bar" type="float"/>
  4. </class>

表 20.1. Summary

属性(Attribute)值(Values)解释(Interpretation)
length数字字段长度
precision数字精度(decimal precision)
scale数字小数点位数(decimal scale)
not-nulltrue&#124;false指明字段是否应该是非空的
uniquetrue&#124;false指明是否该字段具有惟一约束
indexindex_name指明一个(多字段)的索引(index)的名字
unique-keyunique_key_name指明多字段惟一约束的名字(参见上面的说明)
foreign-keyforeign_key_namespecifies the name of the foreign key constraint generated for an association, for a &lt;one-to-one&gt;, &lt;many-to-one&gt;, &lt;key&gt;, or &lt;many-to-many&gt; mapping element. Note that inverse="true" sides will not be considered by SchemaExport. 指明一个外键的名字,它是为关联生成的,或者&lt;one-to-one&gt;&lt;many-to-one&gt;, &lt;key&gt;, 或者&lt;many-to-many&gt;映射元素。注意inverse="true"SchemaExport时会被忽略。
sql-typeSQL 字段类型覆盖默认的字段类型(只能用于&lt;column&gt;属性)
defaultSQL表达式为字段指定默认值
checkSQL 表达式对字段或表加入SQL约束检查

&lt;comment&gt;元素可以让你在生成的schema中加入注释。

  1. <class name="Customer" table="CurCust">
  2. <comment>Current customers only</comment>
  3. ...
  4. </class>
  1. <property name="balance">
  2. <column name="bal">
  3. <comment>Balance in USD</comment>
  4. </column>
  5. </property>

结果是在生成的DDL中包含comment on table 或者 comment on column语句(假若支持的话)。