/**
* 普通员工
* @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;
}
}
/**
* 正式工
* @author wangtao
*
*/
public class FormalStaff extends Staff {
// 正式员工有 工号
private String staffId;
public String getStaffId() {
return staffId;
}
public void setStaffId(String staffId) {
this.staffId = staffId;
}
}
/**
* 临时工有
* @author wangtao
*
*/
public class TempStaff extends Staff {
// 临时工 - 工时
private int hours;
public int getHours() {
return hours;
}
public void setHours(int hours) {
this.hours = hours;
}
}
<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
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