1、一个子类对应一张表
Employee.java
package org.lazyzhong.model;
public class Employee {
private int id;
private String name;
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;
}
}
Skill.java
package org.lazyzhong.model;
public class Skill extends Employee{
private String skiller;
public String getSkiller() {
return skiller;
}
public void setSkiller(String skiller) {
this.skiller = skiller;
}
}
Sale.java
package org.lazyzhong.model;
public class Sale extends Employee {
private int sell;
public int getSell() {
return sell;
}
public void setSell(int sell) {
this.sell = sell;
}
}
Employee.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="org.lazyzhong.model">
<class name="Employee" table="employees" abstract="true"> //设置abstract为true不生成employee表
<id name="id" column="EMPLOYEE_ID">
<generator class="hilo" />
</id>
<property name="name" column="EMPLOYEE_NAME" />
<union-subclass name="Sale" table="SALE">
<property name="sell" column="SELL"/>
</union-subclass>
<union-subclass name="Skill" table="SKILL">
<property name="skiller" column="SKILLER"/>
</union-subclass>
</class>
</hibernate-mapping>
Mytest.java
public class MyTest {
public static void main(String[] args) {
Configuration cf=new Configuration();
cf.configure();
SessionFactory sf=cf.buildSessionFactory();
Session session=sf.openSession();
session.beginTransaction();
// Skill skill=new Skill();
// skill.setName("p1");
// skill.setSkiller("eating..");
//
// Sale sale=new Sale();
// sale.setName("p2");
// sale.setSell(10);
//
// session.save(skill);
// session.save(sale);
Employee employee1=(Employee) session.get(Skill.class,1);
System.out.println(employee1.getName());
Employee employee2=(Employee) session.get(Sale.class,2);
System.out.println(employee2.getName());
session.getTransaction().commit();
session.close();
}
}
表结构
Skill
EMPLOYEE_ID | EMPLOYEE_NAME | SKILLER |
Sale
EMPLOYEE_ID | EMPLOYEE_NAME | SALE |
2、使用一张表表示所有继承体系下的类的属性的并集
还是采用上面的java类...
Employee.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="org.lazyzhong.model">
<class name="Employee" table="employees">
<id name="id" column="EMPLOYEE_ID">
<generator class="hilo" />
</id>
<discriminator column="employeeType" type="string"></discriminator> //作为辨别类型的标志...Employee类中不需要添加这个属性...
<property name="name" column="EMPLOYEE_NAME" />
<subclass name="Sale" discriminator-value="salers"> //salers作为employeeType字段的值...
<property name="sell" column="SELL"/>
</subclass>
<subclass name="Skill" discriminator-value="skillers"> //skillers作为employeeType字段的值
<property name="skiller" column="SKILLER"/>
</subclass>
</class>
</hibernate-mapping>
MyTest.java
package org.lazyzhong.test;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.lazyzhong.model.Employee;
import org.lazyzhong.model.Sale;
import org.lazyzhong.model.Skill;
public class MyTest {
public static void main(String[] args) {
Configuration cf=new Configuration();
cf.configure();
SessionFactory sf=cf.buildSessionFactory();
Session session=sf.openSession();
session.beginTransaction();
// Skill skill=new Skill();
// skill.setSkiller("eating...");
// skill.setName("haha");
// session.save(skill);
Skill employee=(Skill) session.get(Skill.class,1);
System.out.println(employee.getName()+" "+employee.getSkiller());
session.getTransaction().commit();
session.close();
}
}
3、每个子类都使用一张表来存储他特有的字段,父类则保存公共的信息...
Employee.java
<?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="org.lazyzhong.model">
<class name="Employee" table="employees">
<id name="id" column="EMPLOYEE_ID">
<generator class="hilo" />
</id>
<property name="name" column="EMPLOYEE_NAME" />
<joined-subclass name="Sale" table="sale">
<key column="id" />
<property name="sell" column="SELL"/>
</joined-subclass>
<joined-subclass name="Skill" table="skiller">
<key column="id" />
<property name="skiller" column="SKILLER"/>
</joined-subclass>
</class>
</hibernate-mapping>
MyTest.java
package org.lazyzhong.test;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.lazyzhong.model.Employee;
import org.lazyzhong.model.Sale;
import org.lazyzhong.model.Skill;
public class MyTest {
public static void main(String[] args) {
Configuration cf=new Configuration();
cf.configure();
SessionFactory sf=cf.buildSessionFactory();
Session session=sf.openSession();
session.beginTransaction();
Skill skill=new Skill();
skill.setSkiller("eating...");
skill.setName("haha");
session.save(skill);
session.getTransaction().commit();
session.close();
}
}