Hibernate继承映射之三_用多张表映射2

【回顾】Hibernate继承映射之一_用一张表映射

【回顾】Hibernate继承映射之二_用多张表映射


这次给大家带来的是继承映射的第二种方法:用多张表映射,每张表都有公共字段!

映射情景回顾以及各实体类在这里就不重复写了,需要的都在:http://blog.csdn.net/nthack5730/article/details/45366983

【因为除了映射文件改变而已】


映射文件,这次只有一个:Article.hbm.xml

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
                                   "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<!-- This mapping demonstrates -->
<!-- 告诉hibernate需要找哪个表 -->
<hibernate-mapping package="i_hbm_extends3">
	
	<!-- 
		采用每个具体类一张表的方式,抽象类不对应表 
		abstract:默认为false,设为true表示抽象的,表示不对应表。
		写成抽象的表示本类不对应表,不代表类的结构就是抽象的。
		这时会忽略table属性。
	-->
	<class name="Article" abstract="true">
		<id name="id">
		<!-- 
			当使用每个具体类一张表的方式时,主键生成策略不能是identity。
			因为在整个继承结构中,主键值是不能重复的。
			=================================================
			假设如果是identity,那么在数据库中的主键是数据库自己生成的,那么在表中就可能会有一个ID等于1的Topic和ID等于1的Reply
			假设现在用ID=1和Article类型查数据库,那么我们就不能知道这个查回来的是主题还是回复。因为这是继承多态的特性。
			=================================================
			但是在前面两种情况中都不会,因为他的主键是根据父类表Article生成的外键,是引用的,因此不会出现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="title" />
		<property name="context" type="text" length="20000"/>
		<property name="postTime" type="timestamp"/>
		
		<!-- 
			子类:Topic,每一段里面,每一个子类只写自己特有的信息
			name:指的是子类的类型名称
		-->
		<union-subclass name="Topic" table="topic2">
			<property name="type"></property>
		</union-subclass>
		
		
		<!-- 
			子类:Reply,每一段里面,每一个子类只写自己特有的信息
		-->
		<union-subclass name="Reply" table="reply2">
 			<property name="floor"></property>
		</union-subclass>
		
	</class>
</hibernate-mapping>


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值