zoukankan      html  css  js  c++  java
  • hibernate 继承映射关系( SINGLE_TABLE)

    三种继承映射关系。

     

    1,SINGLE_TABLE

     

    person student  teacher 在一个表中,student和teacher继承自person,通过一个DiscriminatorValue的内容来标识该条内容是student还是teacher。

     

    package com.bjsxt.hibernate;

    import javax.persistence.DiscriminatorColumn;
    import javax.persistence.DiscriminatorType;
    import javax.persistence.DiscriminatorValue;
    import javax.persistence.Entity;
    import javax.persistence.GeneratedValue;
    import javax.persistence.Id;
    import javax.persistence.Inheritance;
    import javax.persistence.InheritanceType;

    @Entity
    @Inheritance(strategy=InheritanceType.SINGLE_TABLE)
    @DiscriminatorColumn(name="discriminator", discriminatorType=DiscriminatorType.STRING)
    @DiscriminatorValue("person")

    public class Person {
        private int id;
        private String name;
       
        @Id
        @GeneratedValue
        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 com.bjsxt.hibernate;

    import javax.persistence.DiscriminatorValue;
    import javax.persistence.Entity;

    @Entity
    @DiscriminatorValue("student")
    public class Student extends Person {
       
        private int score;

        public int getScore() {
            return score;
        }

        public void setScore(int score) {
            this.score = score;
        }
       
    }

     

    package com.bjsxt.hibernate;

    import javax.persistence.DiscriminatorValue;
    import javax.persistence.Entity;

    @Entity
    @DiscriminatorValue("teacher")
    public class Teacher extends Person {
        private String title;

        public String getTitle() {
            return title;
        }

        public void setTitle(String title) {
            this.title = title;
        }

       
    }

     

     

     

    测试类:

    package com.bjsxt.hibernate;

    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();
        }
        @Test
        public void testLoad() {
           
            testSave();
            Session session = sessionFactory.openSession();
            session.beginTransaction();
            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());
            session.getTransaction().commit();
            session.close();
           
        }
       
        @Test
        public void testSchemaExport() {
            new SchemaExport(new AnnotationConfiguration().configure()).create(false, true);
        }
       
       
        public static void main(String[] args) {
            beforeClass();
        }
    }

  • 相关阅读:
    第12课 计算器核心解析算法(上)
    第11课 Qt中的字符串类
    第10课 初探 Qt 中的消息处理
    第9课 计算器界面代码重构
    第8课 启航!第一个应用实例
    第7课 Qt中的坐标系统
    第6课 窗口部件及窗口类型
    第5课 Qt Creator工程介绍
    第4课 Hello QT
    给Linux内核增加一个系统调用的方法(转)
  • 原文地址:https://www.cnblogs.com/flying607/p/3480901.html
Copyright © 2011-2022 走看看