多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
# 5.1.6\. 鉴别器(discriminator) 在"一棵对象继承树对应一个表"的策略中,`&lt;discriminator&gt;`元素是必需的, 它定义了表的鉴别器字段。鉴别器字段包含标志值,用于告知持久化层应该为某个特定的行创建哪一个子类的实例。 如下这些受到限制的类型可以使用: `string`, `character`, `integer`, `byte`, `short`, `boolean`, `yes_no`, `true_false`. ``` <discriminator column="discriminator_column" type="discriminator_type" force="true|false" insert="true|false" formula="arbitrary sql expression" /> ``` | ![1](img/1.png) | `column` (可选 - 默认为 `class`) 鉴别器字段的名字 | |:--- |:--- | | ![2](img/2.png) | `type` (可选 - 默认为 `string`) 一个Hibernate字段类型的名字 | | ![3](img/3.png) | `force(强制)` (可选 - 默认为 `false`) "强制"Hibernate指定允许的鉴别器值,即使当取得的所有实例都是根类的。 | | ![4](img/4.png) | `insert` (可选 - 默认为`true`) 如果你的鉴别器字段也是映射为复合标识(composite identifier)的一部分,则需将 这个值设为`false`。(告诉Hibernate在做SQL `INSERT` 时不包含该列) | | ![5](img/5.png) | `formula` (可选) 一个SQL表达式,在类型判断(判断是父类还是具体子类-译注)时执行。可用于基于内容的鉴别器。 | 鉴别器字段的实际值是根据`&lt;class&gt;`和`&lt;subclass&gt;`元素中 的`discriminator-value`属性得来的。 `force`属性仅仅在这种情况下有用的:表中包含没有被映射到持久化类的附加辨别器值。 这种情况不会经常遇到。 使用`formula`属性你可以定义一个SQL表达式,用来判断一个行数据的类型。 ``` <discriminator formula="case when CLASS_TYPE in ('a', 'b', 'c') then 0 else 1 end" type="integer"/> ```