//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();
}
}