继承关系常用的两种映射关系:
(1) one table 结合 join table :
<hibernate-mapping package="cd.itcast.day4.extend">
<!-- onetable 结合jointable, 取长补短 -->
<class name="Product" table="product" discriminator-value="1">
<id name="id" column="id">
<generator class="native"/>
</id>
<!-- 鉴别器 -->
<discriminator column="TYPES" type="integer"/>
<property name="name" column="name"/>
<property name="price" column="price"/>
<subclass name="BookProduct" discriminator-value="2">
<property name="isbn" column="isbn"/>
</subclass>
<subclass name="WearProduct" discriminator-value="3">
<join table="wear_product">
<key column="product_id"/>
<property name="color" column="color"/>
</join>
</subclass>
</class>
</hibernate-mapping>
(2) per table :
<hibernate-mapping package="cd.itcast.day4.extend">
<!-- per table -->
<class name="Product" table="product">
<id name="id" column="id">
<generator class="org.hibernate.id.enhanced.TableGenerator">
<param name="segment_value">IdDomain</param>
<param name="initial_value">1</param>
<param name="increment_size">1</param>
</generator>
</id>
<property name="name" column="name"/>
<property name="price" column="price"/>
<union-subclass name="BookProduct" table="book_product">
<property name="isbn" column="isbn"/>
</union-subclass>
<union-subclass name="WearProduct" table="wear_product">
<property name="color" column="color"/>
</union-subclass>
</class>
</hibernate-mapping>
扩展, 使用HQL查询Product 的多个子类:
List l = session.createQuery("select p from Product p where type(p) in (BookProduct,WearProduct)").list();