企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
# 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](https://box.kancloud.cn/2015-10-12_561bcb76795ae.png) | `column` (可选 - 默认为 `class`) 鉴别器字段的名字 | |:--- |:--- | | ![2](https://box.kancloud.cn/2015-10-12_561bcb768596e.png) | `type` (可选 - 默认为 `string`) 一个Hibernate字段类型的名字 | | ![3](https://box.kancloud.cn/2015-10-12_561bcb94ee26f.png) | `force(强制)` (可选 - 默认为 `false`) "强制"Hibernate指定允许的鉴别器值,即使当取得的所有实例都是根类的。 | | ![4](https://box.kancloud.cn/2015-10-12_561bcb9508b82.png) | `insert` (可选 - 默认为`true`) 如果你的鉴别器字段也是映射为复合标识(composite identifier)的一部分,则需将 这个值设为`false`。(告诉Hibernate在做SQL `INSERT` 时不包含该列) | | ![5](https://box.kancloud.cn/2015-10-12_561bcb95133e7.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"/> ```