Hibernate继承(1)单表继承

Hibernate继承(1)单表继承

代码:

package bean;

import java.util.Date;

public class Person {

    private Integer id;
    private String name;
    private int password;
    private Date birthday;
    
    public Person()
    {
        
    }

    @Override
    public String toString() {
        return "Person [id=" + id + ", name=" + name + ", password=" + password
                + ", birthday=" + birthday + "]";
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getPassword() {
        return password;
    }

    public void setPassword(int password) {
        this.password = password;
    }

    public Date getBirthday() {
        return birthday;
    }

    public void setBirthday(Date birthday) {
        this.birthday = birthday;
    }
    
    
    
    
}
package bean;

public class Student extends Person{

	private int classId;
	private String className;
	private int course;
	@Override
	public String toString() {
		return "Student [classId=" + classId + ", className=" + className
				+ ", course=" + course + ", getId()=" + getId()
				+ ", getName()=" + getName() + ", getPassword()="
				+ getPassword() + ", getBirthday()=" + getBirthday() + "]";
	}
	public int getClassId() {
		return classId;
	}
	public void setClassId(int classId) {
		this.classId = classId;
	}
	public String getClassName() {
		return className;
	}
	public void setClassName(String className) {
		this.className = className;
	}
	public int getCourse() {
		return course;
	}
	public void setCourse(int course) {
		this.course = course;
	}
	
	
	
}

  

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping SYSTEM "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd" >
<!-- 单表继承关系  配置实现 
    因为是多个子类都存储在 同一张表中,为了区分不同的子类,单表继承策略使用了一个 辨别列(discriminator)
    注意:discriminator 辨别列一定要定义在 id 后面,紧跟id配置
    type="string" 指定辨别列类型  column="type_id" 辨别列名称
    
    通过subclass引入 子类
    
 -->
<hibernate-mapping package="bean">
    <class name="Person" table="t_person" >
        <id name="id"><generator class="identity"/></id>
        <discriminator type="string" column="type_id"/>
        <property name="name"/>
        <property name="password"/>
        <property name="birthday"/>
        
        <subclass name="Student">
            <property name="classId"/>
            <property name="className"/>
            <property name="course"/>
        </subclass>

    </class>
    
</hibernate-mapping>
<!DOCTYPE hibernate-configuration PUBLIC
    "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
    "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">

<hibernate-configuration>
    <session-factory>
        <!-- 显示执行SQL语句 -->
        <property name="show_sql">true</property>
         <!-- 格式化SQL语句 -->
        <property name="format_sql">false</property>
        <!-- 驱动 -->
        <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
        <!-- 数据库url-->
        <property name="hibernate.connection.url">jdbc:mysql:///hibernate_db</property>
        <!-- 访问数据库用户名 -->
        <property name="hibernate.connection.username">root</property>
        <!-- 访问数据库密码 -->
        <property name="hibernate.connection.password">root</property>
        <!-- 方言(为了更好的操作具体的数据库) 
            如果使用的mysql数据版本在5.5之后的话,方言通常建议使用MySQL5InnoDBDialect
            MySQLDialect 不支持事务
            MySQLInnoDBDialect 支持事务
         -->
        <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
        <!-- 自动创建表结构配置
            create-drop 在程序启动的时候创建对应数据库表结构,当SessionFatory关闭的时候会将创建的表结构删除
            create 在每次程序启动的时候先删除上次创建的数据库表结构,然后再创建对应新数据库表结构。
            update 在每次启动的时候会追加修改的表结构,但是不会影响原来的数据 (通常用这个)
            validate 在每次启动的时候会验证并修改的表结构。
         -->
        <property name="hibernate.hbm2ddl.auto">update</property>
        
        <!-- 引入对应的需要持久化类的配置文件 -->
        <mapping resource="bean/Person.hbm.xml"/>
        
    </session-factory>
</hibernate-configuration>
package Test;



import bean.Person;
import bean.Student;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;
import org.hibernate.service.ServiceRegistryBuilder;


public class HibernateTest {
    SessionFactory  sessionFactory =null;
    Session session =null;
    Transaction tx = null;
    /**
     * 初始化测试数据 
     * @throws Exception
     */

    public void setUp() throws Exception {
        System.out.println("------setUp---初始化测试资源-----");
        Configuration config = new Configuration().configure();
        ServiceRegistry sr = new ServiceRegistryBuilder().applySettings(config.getProperties()).buildServiceRegistry();
        sessionFactory = config.buildSessionFactory(sr);
        session = sessionFactory.openSession();
    }
    
    
    public void testAdd(){
        Person p = new Person();
        p.setName("tom");
        p.setPassword(123456);
        p.setBirthday(new java.util.Date());

        tx = session.beginTransaction();
    
        session.persist(p);
        tx.commit();
    }
    
    
    public void testAdd2(){
        Student stu = new Student();
        stu.setName("stu");
        stu.setPassword(123456);
        stu.setBirthday(new java.util.Date());
        stu.setClassId(1206);
        stu.setClassName("J1206");
        stu.setCourse(90);
        tx = session.beginTransaction();
    
        session.persist(stu);
        tx.commit();
    }
    
    
    public void testGet(){
        
        Person p = (Person)session.get(Person.class, 1);
        
        System.out.println(p);
        
    }
    
    public void testGet2(){
        
        Student stu = (Student)session.get(Student.class, 2);
        
        System.out.println(stu);
        
    }
    
    
    /**
     * 释放测试数据 
     * @throws Exception
     */
    
    public void tearDown() throws Exception {
        System.out.println("------tearDown---释放测试数据---");
        session.close();
        sessionFactory.close();
    }
    
    public static void main(String [] args) throws Exception
    {
        HibernateTest h = new HibernateTest();
        h.setUp();
        h.testAdd2();
        h.tearDown();
    }

}

 

 

posted on 2014-12-19 12:20  aicpcode  阅读(293)  评论(0编辑  收藏  举报

导航