天天看點

hibernate 繼承映射關系( TABLE_PER_CLASS)

Person,Student,Teacher各建立一個表,主鍵用一個中間表生成。

package com.bjsxt.hibernate;

import javax.persistence.Entity;

import javax.persistence.GeneratedValue;

import javax.persistence.GenerationType;

import javax.persistence.Id;

import javax.persistence.Inheritance;

import javax.persistence.InheritanceType;

import javax.persistence.TableGenerator;

@Entity

@Inheritance(strategy=InheritanceType.TABLE_PER_CLASS)

@TableGenerator(

        name="t_gen",

        table="t_gen_table",

        pkColumnName="t_pk",

        valueColumnName="t_value",

        pkColumnValue="person_pk",

        initialValue=1,

        allocationSize=1

        )

public class Person {

    private int id;

    private String name;

    @Id

    @GeneratedValue(generator="t_gen", strategy=GenerationType.TABLE)

    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;

}

public class Student extends Person {

    private int score;

    public int getScore() {

        return score;

    public void setScore(int score) {

        this.score = score;

public class Teacher extends Person {

    private String title;

    public String getTitle() {

        return title;

    public void setTitle(String title) {

        this.title = title;

測試類:

import java.util.Map;

import org.hibernate.Session;

import org.hibernate.SessionFactory;

import org.hibernate.cfg.AnnotationConfiguration;

import org.hibernate.tool.hbm2ddl.SchemaExport;

import org.junit.AfterClass;

import org.junit.BeforeClass;

import org.junit.Test;

public class HibernateORMappingTest {

    private static SessionFactory sessionFactory;

    @BeforeClass

    public static void beforeClass() {

        new SchemaExport(new AnnotationConfiguration().configure()).create(false, true);

        sessionFactory = new AnnotationConfiguration().configure().buildSessionFactory();

    @AfterClass

    public static void afterClass() {

        sessionFactory.close();

    @Test

    public void testSave() {

        Student s = new Student();

        s.setName("s1");

        s.setScore(80);

        Teacher t = new Teacher();

        t.setName("t1");

        t.setTitle("中級");

        Session session = sessionFactory.openSession();

        session.beginTransaction();

        session.save(s);

        session.save(t);

        session.getTransaction().commit();

        session.close();

    public void testLoad() {

        testSave();

        Student s = (Student)session.load(Student.class, 1);

        System.out.println(s.getScore());

        Person p = (Person)session.load(Person.class, 2);

        System.out.println(p.getName());

    public void testSchemaExport() {

    public static void main(String[] args) {

        beforeClass();