(8)hibernate四种继承映射
生活随笔
收集整理的這篇文章主要介紹了
(8)hibernate四种继承映射
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一?一個類繼承體系一張表
1 對象模型(java類結構)
2 映射后據庫中的表
3 代碼
Employee.java
package com.learning;public class Employee {private int id;private String name;public Employee() {}public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}}Sales.java
package com.learning;public class Sales extends Employee{private String sell;public Sales() {}public String getSell() {return sell;}public void setSell(String sell) {this.sell = sell;}}Skiller.java
package com.learning;public class Skiller extends Employee {private String skill;public Skiller() {}public String getSkill() {return skill;}public void setSkill(String skill) {this.skill = skill;}}Employee.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"><hibernate-mapping package="com.learning"><class table="employee" name="Employee" discriminator-value="employee"><id name="id"><generator class="native"/></id><discriminator column="type" type="string"/><property name="name" column="name"/><subclass name="Skiller" discriminator-value="skiller"><property name="skill" /></subclass><subclass name="Sales" discriminator-value="sales"><property name="sell" /></subclass></class></hibernate-mapping>
測試類?
ExtendsOneTest.java
package com.test;import java.util.Date; import java.util.List;import org.hibernate.Query; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.cfg.Configuration;import com.learning.Employee; import com.learning.Sales; import com.learning.Skiller;public class ExtendsOneTest {private SessionFactory sessionFactory;{this.init();}private void init(){Configuration cfg = new Configuration();sessionFactory= cfg.configure().buildSessionFactory();}/*** 公用一張表* */private void test(){Session session = this.sessionFactory.openSession();session.beginTransaction();Employee employee = new Employee();employee.setName("employee name");Skiller skiller = new Skiller();skiller.setName("skiller name");skiller.setSkill("skill");Sales sales = new Sales();sales.setSell("sales name");sales.setSell("sell");session.save(employee);session.save(skiller);session.save(sales);session.getTransaction().commit();session.close();}public static void main(String[] args) {ExtendsOneTest extendsOneTest = new ExtendsOneTest();extendsOneTest.test();}}數據庫結果
二?每個子類不同的部分用一張表
1 對象模型(java類結構)與上面相同
2 映射后據庫中的表
3 代碼
Employee.java ,Sales.java,Skiller.java與上面相同
Employee.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"><hibernate-mapping package="com.learning"><class table="employee" name="Employee"><id name="id"><generator class="native"/></id><property name="name" column="name"/><joined-subclass name="Skiller" table="skiller"><key column="emp_id"/><property name="skill" /></joined-subclass><joined-subclass name="Sales" table="sales"><key column="emp_id"/><property name="sell" /></joined-subclass></class></hibernate-mapping>測試類與ExtendsOneTest.java相同
數據庫中結果
三?繼承關系與內連接結合
混合使用”一個類繼承體系一張表”和”每個子類一張表”
1 對象模型(java類結構)與上面相同
2 映射后據庫中的表
3代碼
Employee.java ,Sales.java和Skiller.java與上面一樣
Employee.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"><hibernate-mapping package="com.learning"><class table="employee" name="Employee" discriminator-value="employee"><id name="id"><generator class="native"/></id><discriminator column="type" type="string"/><property name="name" column="name"/><subclass name="Skiller" discriminator-value="skiller"><property name="skill" /></subclass><subclass name="Sales" discriminator-value="sales"><join table="sales"><key column="emp_id" /><property name="sell" /></join></subclass></class> </hibernate-mapping>數據庫截圖
四?每個具體類一張表
1 對象模型(java類結構)與上面一樣
2 映射后的結果
3代碼
Employee.java , Sales.java和Skiller.java與上面相同
Employee.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"><hibernate-mapping package="com.learning"><class table="employee" name="Employee" ><id name="id"><generator class="hilo"/></id><property name="name" column="name"/><union-subclass name="Skiller" table="skiller"><property name="skill" /></union-subclass><union-subclass name="Sales" table="sales"><property name="sell" /></union-subclass></class> </hibernate-mapping>測試類與上面相同
數據庫結果
總結
以上是生活随笔為你收集整理的(8)hibernate四种继承映射的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: (7) hibernate之级联casc
- 下一篇: (9) hibernate加载持久化对象