Hibernate的继承映射 -电脑资料

电脑资料 时间:2019-01-01 我要投稿
【meiwen.anslib.com - 电脑资料】

   

    使用继承映射的前提是,项目不先设计数据库,而是先设计pojo类,再根据pojo生成数据库表,同时pojo中必须出现继承关系,

Hibernate的继承映射

    这里按照这种继承关系设计以下几个类:

    1) 父类:Person,建议使用抽象类

    a) 属性

    i. Id

    ii. Name

    iii. age

    2) 子类:

    a) Student

    i. School

    ii. score

    b) Worker

    i. sal

    根据以上的类,需要设计表结构:

    1) 三张表:

    a) Person表

    i. 字段

    1. Id,主键

    2. Name

    3. age

    b) Student表

    i. 字段

    1. Id,主键,外键

    2. School

    3. score

    c) Worker表

    i. 字段

    1. Id:主键,外键

    2. Sal

    d) 优点:标准范式,容易扩展

    e) 缺点:代码实现难度大,多表关联操作过多。

    2) 两张表:

    a) Student

    i. Id

    ii. Name

    iii. Age

    iv. School

    v. score

    b) Worker

    i. Id

    ii. Name

    iii. Age

    iv. Sal

    c) 优点:代码相对简单,相对容易扩展

    d) 缺点:完全没有体现继承关系,查询所有数据比较麻烦

    3) 一张表

    a) Person

    i. Id

    ii. Name

    iii. Age

    iv. School

    v. Score

    vi. Sal

    vii. Type

    b) 优点:代码最简单

    c) 缺点:不容易扩展和维护。

    在这里使用Hibernate实现三张表和一张表的设计。

    先建立pojo类。

    public abstract class Person {

    private String id;

    private String name;

    private Integer age;

    public class Student extends Person {

    private String school;

    private Double score;

    public class Worker extends Person {

    private Double sal;

    手工编写Person的映射文件:

    先完成三张表形式的映射:

   

   

   

   

   

   

   

   

   

   

   

   

   

   

   

    schema="SUNXUN">

   

   

   

   

   

   

   

   

   

   

   

    schema="SUNXUN">

   

   

   

   

   

   

   

   

   

    注意,外键使用 来表示

    将该映射文件配置到hibernate.cfg.xml中:

   

   

    "-//Hibernate/Hibernate Configuration DTD 3.0//EN"

   

   

   

   

    org.hibernate.dialect.Oracle9Dialect

   

   

    jdbc:oracle:thin:@localhost:1521:ORCL

   

    sunxun

    123

   

    oracle.jdbc.OracleDriver

   

    oracle

    true

    true

   

   

   

    加入后,可以编写一个生成数据库表的操作:

    public class DataBaseUtils {

    public static void createTable() {

    SchemaExport export = new SchemaExport(HibernateSessionFactory

    .getConfiguration());

    export.create(true, true);

    }

    public static void dropTable() {

    SchemaExport export = new SchemaExport(HibernateSessionFactory

    .getConfiguration());

    export.drop(true, true);

    }

    public static void main(String[] args) {

    createTable();

    }

    }

    编写数据库操作时,只需要写Person的操作即可,

电脑资料

Hibernate的继承映射》(http://meiwen.anslib.com)。

    public static void main(String[] args) {

    // Student s = new Student();

    // s.setId("123");

    // s.setName("张三");

    // s.setAge(23);

    // s.setSchool("北航");

    // s.setScore(60.0);

    // Worker w = new Worker();

    // w.setId("abc");

    // w.setName("李四");

    // w.setAge(33);

    // w.setSal(10000.0);

    //

    // Transaction tx = HibernateSessionFactory.getSession()

    // .beginTransaction();

    // HibernateSessionFactory.getSession()。save(w);

    //

    // tx.commit();

    String hql = "FROM Person";

    System.out.println(HibernateSessionFactory.getSession()

    .createQuery(hql)。list());

    HibernateSessionFactory.closeSession();

    }

    如果只使用一张表,只需要修改映射文件即可,程序代码完全不需要修改。

   

   

最新文章