Hibernate的繼承映射可以理解為持久化類之間的繼承關系。例如:人和學生之間的關系。學生繼承了人,可以認為學生是一個特殊的人,如果對人進行查詢,學生的實例也將被得到。
Hibernate支持以下三種繼承映射策略:
下面分情況具體了解以上三種映射策略。采用Person作為父類,Student作為子類來詳細解釋以上三種策略實現。其中Perosn(id, name, age), Studnet(school)
采用subclass進行映射:
Person.hbm.xml
1 <?xml version="1.0"?> 2 <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" 3 "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> 4 <!-- Generated 2014-11-30 9:34:50 by Hibernate Tools 3.4.0.CR1 --> 5 <hibernate-mapping package="com.yl.hibernate.subclass"> 6 <class name="Person" table="PERSONS" discriminator-value="PERSON"> 7 <id name="id" type="java.lang.Integer"> 8 <column name="ID" /> 9 <generator class="native" />10 </id>11 12 <!-- 配置辨別者列 -->13 <discriminator column="TYPE" type="string"></discriminator>14 15 <PRoperty name="name" type="java.lang.String">16 <column name="NAME" />17 </property>18 <property name="age" type="int">19 <column name="AGE" />20 </property>21 <!-- 映射子類Student, 使用subclass進行映射 -->22 <subclass name="Student" discriminator-value="STUDENT">23 <property name="school" type="string" column="SCHOOL"></property>24 </subclass>25 </class>26 </hibernate-mapping>
采用joined-subclass進行映射
Person.hbm.xml
1 <?xml version="1.0"?> 2 <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" 3 "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> 4 <!-- Generated 2014-11-30 9:34:50 by Hibernate Tools 3.4.0.CR1 --> 5 <hibernate-mapping package="com.yl.hibernate.joined.subclass"> 6 <class name="Person" table="PERSONS"> 7 <id name="id" type="java.lang.Integer"> 8 <column name="ID" /> 9 <generator class="native" />10 </id>11 12 <property name="name" type="java.lang.String">13 <column name="NAME" />14 </property>15 <property name="age" type="int">16 <column name="AGE" />17 </property>18 <!-- 映射子類Student, 使用joined-subclass進行映射 -->19 <joined-subclass name="Student" table="STUDENTS">20 <key column="STUDENT_ID"></key>21 <property name="school" type="string" column="SCHOOL"></property>22 </joined-subclass>23 24 </class>25 </hibernate-mapping>
采用union-subclass進行映射
Person.hbm.xml
1 <?xml version="1.0"?> 2 <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" 3 "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> 4 <!-- Generated 2014-11-30 9:34:50 by Hibernate Tools 3.4.0.CR1 --> 5 <hibernate-mapping package="com.yl.hibernate.union.subclass"> 6 <class name="Person" table="PERSONS"> 7 <id name="id" type="java.lang.Integer"> 8 <column name="ID" /> 9 <generator class="hilo" />10 </id>11 12 <property name="name" type="java.lang.String">13 <column name="NAME" />14 </property>15 <property name="age" type="int">16 <column name="AGE" />17 </property>18 <!-- 映射子類Student, 使用union-subclass進行映射 -->19 <union-subclass name="Student" table="STUDENTS">20 <property name="school" type="string" column="SCHOOL"></property>21 </union-subclass>22 23 24 25 </class>26 </hibernate-mapping>
新聞熱點
疑難解答