hibernate的继承的映射关系的例子

//Dep.hbm.xml的代码

 

<?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="com.extend">
 
 <class name="Dep">
 <id name="depId">
  <generator class="native"></generator>
 </id>
 
 <property name="depName"></property> 
 <set name="emps" cascade="all">
  <key column="depId"></key>
  <one-to-many class="Employee"/>
 </set>
 </class>
</hibernate-mapping>

 

//Emp.hbm.xml的代码

<?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="com.extend">
 
 <class name="Employee"  discriminator-value="0">
 <id name="empId">
  <generator class="hilo"></generator>
 </id>
 <!--  <discriminator column="type" type="string"></discriminator>-->
 <!-- 第一种写法 -->
 <!--  <discriminator column="type" type="string"></discriminator>有识别力的
 <property name="name"></property> 
 <many-to-one name="dep" column="depId" cascade="all"></many-to-one>
 <subclass name="Sales" discriminator-value="1">
  <property name="sale"></property>
 </subclass> 
 <subclass name="Skiller" discriminator-value="2">
  <property name="skiller"></property>
 </subclass>-->
 
 <!-- 第二种写法 -->
 <!--  <property name="name"></property>
 <many-to-one name="dep" cascade="all"  column="depId"></many-to-one>
 
 <joined-subclass name="Sales" table="sales">
  <key column="empId" ></key>
  <property name="sale"></property>
 </joined-subclass>
 <joined-subclass name="Skiller" table="skiller">
   <key column="empId"></key>
   <property name="skiller"></property>
 </joined-subclass>-->
 
 <!-- 第三种写法 -->
 <!--  <property name="name"></property>
 <many-to-one name="dep" column="depId" cascade="all"></many-to-one>
 
 
 <subclass name="Sales"   discriminator-value="1">
  <property name="sale"></property>
 </subclass>
 
 <subclass name="Skiller" discriminator-value="2">
  <join table="skiller">
   <key column="empId"></key>
   <property name="skiller"></property>
  </join>
 </subclass>-->
 
 <!-- 第四种写法 -->
 <property name="name"></property>
 <many-to-one name="dep" column="depId" cascade="all"></many-to-one>
 <union-subclass name="Sales" table="sales">
  <property name="sale"></property>
 </union-subclass>
 
 <union-subclass name="Skiller" table="skiller">
  <property name="skiller"></property>
 </union-subclass>
 </class>
</hibernate-mapping>

 

//pojos类

import java.util.HashSet;
import java.util.Set;

import com.extend.Employee;

public class Dep {
 private String depName;
 private Integer depId;
 private Set<Employee> emps = new HashSet<Employee>();//不能写成private HashSet<Emp> emps = new HashSet<Emp>();注意是接口,而不是具体的类
 
 public String getDepName() {
  return depName;
 }
 public void setDepName(String depName) {
  this.depName = depName;
 }
 public Integer getDepId() {
  return depId;
 }
 public void setDepId(Integer depId) {
  this.depId = depId;
 }
 public Set<Employee> getEmps() {
  return emps;
 }
 public void setEmps(Set<Employee> emps) {
  this.emps = emps;
 }
}

public class Employee {
 
 private Integer empId;
 private String name;
 private Dep dep;
 public Integer getEmpId() {
  return empId;
 }
 public void setEmpId(Integer empId) {
  this.empId = empId;
 }
 public String getName() {
  return name;
 }
 public void setName(String name) {
  this.name = name;
 }
 public Dep getDep() {
  return dep;
 }
 public void setDep(Dep dep) {
  this.dep = dep;
 }
 
}

public class Skiller extends Employee{
 
 private String skiller;

 public String getSkiller() {
  return skiller;
 }

 public void setSkiller(String skiller) {
  this.skiller = skiller;
 }

}

public class Sales extends Employee{
 
 private Integer sale;

 public Integer getSale() {
  return sale;
 }

 public void setSale(Integer sale) {
  this.sale = sale;
 }

}

 

//这是测试的类

import org.hibernate.Session;
import org.hibernate.Transaction;

import com.total.HibernateUtil;

public class Main {
 
 
 public static void main(String[] args) {
  
  
  Session session = HibernateUtil.getSession();
  Transaction transaction = session.beginTransaction();
  
  /*Dep dep = new Dep();
  dep.setDepName("liaonanbu");
  
  Sales sales = new Sales();
  sales.setSale(100);
  sales.setName("张三");
  //sales.setDep(dep);
  
  Skiller skiller = new Skiller();
  //skiller.setDep(dep);
  skiller.setName("李四");
  skiller.setSkiller("技术工");
  
  
  
  Employee employee = new Employee();
  //employee.setDep(dep);
  employee.setName("王五");
  
  //session.save(skiller);
  //session.save(sales);
  //session.save(employee);
  dep.getEmps().add(sales);
  dep.getEmps().add(employee);
  dep.getEmps().add(skiller);
  
  session.save(dep);*/
  /*Dep dep = new Dep();
  dep.setDepName("女生部");
  
  Employee employee = new Employee();
  employee.setDep(dep);
  employee.setName("王五");
  
  Sales sales = new Sales();
  sales.setName("张三");
  sales.setSale(100);
  sales.setDep(dep);
  
  Skiller skiller = new Skiller();
  skiller.setName("李四");
  skiller.setDep(dep);
  skiller.setSkiller("打铁的");
  
  session.save(employee);
  session.save(sales);
  session.save(skiller);
  transaction.commit();*/
  Employee employee2 = (Employee) session.get(Employee.class, 5);
  System.out.println("-----------------");
  System.out.println(employee2.getName());//hibernate能自动判断是哪种对象的类型。
  session.close();
  
  
 }

}

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值