Hibernate继承映射三种策略学习


假设实体关系如下:


继承映射三种策略:


每个类分层结构 一张表  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不能重复

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值