我们目前已经见到过<key>元素多次了。 这个元素在父映射元素定义了对新表的连接,并且在被连接表中定义了一个外键引用原表的主键的情况下经常使用。
<key column="columnname" (1) on-delete="noaction|cascade" (2) property-ref="propertyName" (3) not-null="true|false" (4) update="true|false" (5) unique="true|false" (6) />
(1) | column (可选): 外键字段的名称。也可以通过嵌套的 <column>指定。 |
(2) | on-delete (可选, 默认是 noaction): 表明外键关联是否打开数据库级别的级联删除。 |
(3) | property-ref (可选): 表明外键引用的字段不是原表的主键(提供给遗留数据)。 |
(4) | not-null (可选): 表明外键的字段不可为空(这意味着无论何时外键都是主键的一部分)。 |
(5) | update (可选): 表明外键决不应该被更新(这意味着无论何时外键都是主键的一部分)。 |
(6) | unique (可选): 表明外键应有唯一性约束 (这意味着无论何时外键都是主键的一部分)。 |
对那些看重删除性能的系统,我们推荐所有的键都应该定义为on-delete="cascade",这样 Hibernate 将使用数据库级的ON CASCADE DELETE约束,而不是多个DELETE语句。 注意,这个特性会绕过 Hibernate 通常对版本数据(versioned data)采用的乐观锁策略。
not-null 和 update 属性在映射单向一对多关联的时候有用。如果你映射一个单向一对多关联到非空的(non-nullable)外键,你必须 用<key not-null="true">定义此键字段。