鉴别器(discriminator)

本文介绍了在对象继承树对应一个表的策略中,如何使用<discriminator>元素定义表的鉴别器字段。解释了不同属性如column、type、force等的作用,并通过示例展示了如何设置SQL公式进行类型判断。

在"一棵对象继承树对应一个表"的策略中,<discriminator>元素是必需的, 它定义了表的鉴别器字段。鉴别器字段包含标志值,用于告知持久化层应该为某个特定的行创建哪一个子类的实例。 如下这些受到限制的类型可以使用: 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

column (可选 - 默认为 class) 鉴别器字段的名字

2

type (可选 - 默认为 string) 一个Hibernate字段类型的名字

3

force(强制) (可选 - 默认为 false) "强制"Hibernate指定允许的鉴别器值,即使当取得的所有实例都是根类的。

4

insert (可选 - 默认为true) 如果你的鉴别器字段也是映射为复合标识(composite identifier)的一部分,则需将 这个值设为false。(告诉Hibernate在做SQL INSERT 时不包含该列)

5

formula (可选) 一个SQL表达式,在类型判断(判断是父类还是具体子类-译注)时执行。可用于基于内容的鉴别器。

鉴别器字段的实际值是根据<class><subclass>元素中 的discriminator-value属性得来的。

force属性仅仅在这种情况下有用的:表中包含没有被映射到持久化类的附加辨别器值。 这种情况不会经常遇到。

使用formula属性你可以定义一个SQL表达式,用来判断一个行数据的类型。

<discriminator
    formula="case when CLASS_TYPE in ('a', 'b', 'c') then 0 else 1 end"
    type="integer"/>

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值