hibernate之继承关系

在hibernate中的继承方式有三种,

一、只需要一张父类表

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
        
        <!-- 
		discriminator-value属性:
			用于鉴别是哪个类的一个值,表示这个值就是这个类。
			如果不写,默认为类的全限定名。
	 	-->
        
        <hibernate-mapping package="hibernate_d_extends">
        	<class name="Article" table="article" discriminator-value="Article">
        		<id name="id">
        			<generator class="native" />
        		</id>
      
      		<discriminator column="class_" type="string"></discriminator>
      
      		<span style="white-space:pre">	</span><property name="title"/>
			<property name="content" type="text" length="10000"/>
			<property name="postTime" type="timestamp"/>
			
		
			<!-- 子类:Reply -->
			<subclass name="Reply" discriminator-value="Reply">
				<property name="floor"></property>
			</subclass>
			
			<!-- 子类:Topic -->
			<subclass name="Topic" discriminator-value="Topic">
				<property name="type"></property>
			</subclass>
      		
        	</class>
        </hibernate-mapping>

二、采用每个具体类对应一张表,抽象类不对应表

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
        
       <!-- 采用每个具体类一张表的方式,抽象类不对应表。
			abstract默认为false,设为true表示本类不对应表(类可以不是abstract的),这时就会忽略table属性。
	 	-->
        <hibernate-mapping package="hibernate_d_extends2">
        	<class name="Article" table="article2" abstract="true" >
        		<id name="id">
	        		<!-- 
						当使用每个具体类一张表的方式时,主键生成策略不能是identity。
						因为在整个继承结构中,主键值是不能重复的。
					 -->
        			<generator class="hilo">
        				<param name="table">hi_value</param>
        				<param name="column">next_value</param>
        				<param name="max_lo">100</param>
        			</generator>
        		</id>
      
      
      		<span style="white-space:pre">	</span><property name="title"/>
			<property name="content" type="text" length="10000"/>
			<property name="postTime" type="timestamp"/>
			
		<!-- 子类:Topic -->
		<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>

三、 也是具体类对应一张表,但是抽象类也相对的有一张表

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
        
       <!-- 采用每个具体类一张表的方式,抽象类也对应表。
	 	-->
        <hibernate-mapping package="hibernate_d_extends3">
        	<class name="Article" table="article3" >
        		<id name="id">
        			<generator class="native">
        			</generator>
        		</id>
      
      
      		<span style="white-space:pre">	</span><property name="title"/>
			<property name="content" type="text" length="10000"/>
			<property name="postTime" type="timestamp"/>
			
			<joined-subclass name="Topic" table="topic3">
				<key column="id"></key>
				<property name="type"></property>
			</joined-subclass>
			
			<joined-subclass name="Reply" table="reply3">
				<key column="id"></key>
				<property name="floor"></property>
			</joined-subclass>
        	</class>
        </hibernate-mapping>

通过这三种方式都可以对类进行继承,


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值