数据模型:
表person
表student
表worker
对象模型:
Person private int id; private String name; private int age; private String sex;
Student extends Person private String school;
Worker extends Person private String factory;
xml配置:
<?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="com.skuedu.bean"> <class name="Person" table="person"> <id name="id" > <generator class="native"></generator> </id> <property name="name" length="30"></property> <property name="age" ></property> <property name="sex" length="10"></property> <joined-subclass name="Student" table="student"> <key column="id"></key> <property name="school"></property> </joined-subclass> <joined-subclass name="Worker" table="worker" > <key column="id"></key> <property name="factory"></property> </joined-subclass> </class> </hibernate-mapping>
附录解释:
测试代码:
@Test public void testSaveStudent(){ Session session = HibernateUtil.getSession(); Transaction transaction = session.beginTransaction(); try{ Student student = new Student(); student.setAge(20); student.setName("小王"); student.setSchool("清华大学"); student.setSex("男"); session.save(student); transaction.commit(); }catch(Exception e){ transaction.rollback(); }finally{ HibernateUtil.closeSession(session); } } @Test public void testSaveWorker(){ Session session = HibernateUtil.getSession(); Transaction transaction = session.beginTransaction(); try{ Worker worker = new Worker(); worker.setAge(20); worker.setName("小李"); worker.setFactory("首钢"); worker.setSex("男"); session.save(worker); transaction.commit(); }catch(Exception e){ transaction.rollback(); }finally{ HibernateUtil.closeSession(session); } } @Test public void testFind(){ }
说明:
以person表和student已经person表和worker表都通过这种关联关系实现了主键共享