您的位置:首页 > 其它

Hibernate继承映射三种策略学习

2011-09-18 22:48 417 查看
假设实体关系如下:



继承映射三种策略:

每个类分层结构 一张表 Table per class hierarchy

<!-- 每个类分层结构 一张表 Table per class hierarchy -->

<!-- 只有一张表 -->

<!-- 每个类分层结构 一张表  Table per class hierarchy -->
<!-- 只有一张表 -->
<class name="Payment">
<id name="id">
<generator class="native" />
</id>
<discriminator column="PAYMENT_TYPE" type="string" />
<property name="typeName" />
<property name="amount" />

<subclass name="Credit" discriminator-value="CREDIT">
<property name="number" />
<property name="type" />
<property name="expDate" />
</subclass>
<subclass name="Cash" discriminator-value="CASH">
<property name="cashTenderd" />

</subclass>
<subclass name="Check" discriminator-value="CHECK">
<property name="name" />
<property name="bankId" />

</subclass>
</class>
这种继承映射策略,整个继承结构一张表,则此策略共建一张表,要求字段不能有非空约束,而且要添加多一个字段表示类型(如这里的PAYMENT_TYPE)

注:但此PAYMENT_TYPE字段并未在类属性中,只存在映射文件和数据库表中

每个子类一张表 Table per subclass

<!-- 每个子类一张表  Table per subclass -->
<!-- 共三张表 -->
<class name="Payment">
<id name="id">
<generator class="native" />
</id>
<property name="typeName" />
<property name="amount" />

<joined-subclass name="Credit">
<key column="id"></key>
<property name="number" />
<property name="type" />
<property name="expDate" />
</joined-subclass>
<joined-subclass name="Cash">
<key column="id"></key>
<property name="cashTenderd" />
</joined-subclass>

<joined-subclass name="Check" table="Check_">
<key column="id"></key>
<property name="name" />
<property name="bankId" />
</joined-subclass>
</class>


这种继承映射策略,每个类一张表,抽象类也有表,则共建三张表,要求子表有个字段id,因为此策略要求子表和父表是一对一的关系

注:子表的id字段并未在类属性中,只存在映射文件和数据库表中

每个具体类一个张表 Table per concrete class

<!-- 每个具体类一张表  Table per concrete class -->
<!-- 共两张表 -->
<class name="Payment">
<id name="id">
<generator class="hilo">
<param name="table">hi_value</param>
<param name="column">next_value</param>
<param name="max_lo">100</param>
</generator>
</id>
<property name="typeName" />
<property name="amount" />

<union-subclass name="Credit">
<property name="number" />
<property name="type" />
<property name="expDate" />
</union-subclass>

<union-subclass name="Cash">
<property name="cashTenderd" />
</union-subclass>

<union-subclass name="Check" table="Check_">
<property name="name" />
<property name="bankId" />
</union-subclass>
</class>


这种继承映射策略,每个具体类一张表,则此策略共建两张表,这种策略不支持identity生成策略,要求整个继承结构即所有表所有记录的id不能重复
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: