您的位置:首页 > 其它

hibernate 继承映射 joined-subclass

2010-04-25 19:21 477 查看
package subclass.map;

/**
 * 普通员工
 * @author wangtao
 *
 */
public class Staff {
	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;
	}
}




package subclass.map;

/**
 * 正式工
 * @author wangtao
 *
 */
public class FormalStaff extends Staff {
	// 正式员工有 工号
	private String staffId;

	
	public String getStaffId() {
		return staffId;
	}
	public void setStaffId(String staffId) {
		this.staffId = staffId;
	}
	
}




package subclass.map;

/**
 * 临时工有
 * @author wangtao
 *
 */
public class TempStaff extends Staff {
	// 临时工 - 工时
	private int hours;

	public int getHours() {
		return hours;
	}
	public void setHours(int hours) {
		this.hours = hours;
	}
}






<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="subclass.map">
    <class name="Staff" table="T_subclass_staff">
        <id name="id">
            <generator class="native" />
        </id>
      	<property name="name" type="string" length="20"></property>
      	
      	<joined-subclass name="FormalStaff" table="T_subclass_staff_Formal">
      		<key column="formal_id"></key>
      		<property name="staffId" type="string" length="20"></property>
      	</joined-subclass>
      	
        //key 定义的列既是主键 又是外键
      	<joined-subclass name="TempStaff" table="T_subclass_staff_Temp">
      		<key column="temp_id"></key>
      		<property name="hours"></property>
      	</joined-subclass>
      	
    </class>
    
</hibernate-mapping>


生成三张数据表



staff : id name

formal: formal_id staffId

temp: temp_id hours





package subclass.map.test;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;

import subclass.map.FormalStaff;
import subclass.map.Staff;
import subclass.map.TempStaff;

/**
 * 双向一对多 
 * 增删改查测试
 * @author wangtao
 *
 */
public class Test {
	
	static Session session;
	static{
		SessionFactory fac = new Configuration().configure().buildSessionFactory();
		
		session  = fac.openSession();
	}
	public static void main(String[] args) {
		insert();
	}
	
	public static void insert(){
		Staff staff = new Staff();
		staff.setName("tao");
	
		FormalStaff formal = new FormalStaff();
		formal.setStaffId("idxxxx");
		
		TempStaff temp = new TempStaff();
		temp.setHours(20);
		
		Transaction tx = session.beginTransaction();
		tx.begin();
		
		session.save(staff);
		session.save(formal);
		session.save(temp);
		
		tx.commit();
		
		System.out.println("插入完成.....");
		
	}
	
}






插入完成后,



staff 中的 记录为

1 tao

2 null

3 null



formal 中的记录为



2 idxxxxx



temp 中的记录为

3 20
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: