在每个具体类一个表中,数据库中将有三个表但彼此之间没有关系(关联)。 根据具体类策略将表格映射到表有两种方法。

由union-subclass元素指定

通过自我为每个类创建表

我们来了解映射的层次结构。

下面来看看看我们如何通过union-subclass元素映射这个层次结构, employee.hbm.xml文件的内容如下

/p>

"-//Hibernate/Hibernate Mapping DTD 3.0//EN"

"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

table="regemp122">

table="contemp122">

在每个具体类一张表的情况下,数据库中将有三个表,每个表表示一个特定的类。

类的union-subclass子元素指定子类。 它将父表的列添加到此表中。换句话说,将它们作为一个联合。

每个表的格结构如下:

Employee类的表结构 -

CREATE TABLE `emp122` (

`id` int(11) NOT NULL,

`name` varchar(255) DEFAULT NULL,

PRIMARY KEY (`id`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

Regular_Employee类的表结构 -

CREATE TABLE `regemp122` (

`id` int(11) NOT NULL,

`name` varchar(255) DEFAULT NULL,

`salary` float DEFAULT NULL,

`bonus` int(11) DEFAULT NULL,

PRIMARY KEY (`id`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

Contract_Employee类的表结构 -

CREATE TABLE `contemp122` (

`id` int(11) NOT NULL,

`name` varchar(255) DEFAULT NULL,

`pay_per_hour` float DEFAULT NULL,

`contract_duration` varchar(255) DEFAULT NULL,

PRIMARY KEY (`id`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

每个具体类的表示例

在这个例子中,我们创建了三个类,并在employee.hbm.xml文件中提供了这些类的映射。创建一个项目:inheritance2, 完整的项目结构如下 -

1)创建持久类

您需要创建表示继承的持久化类。 让我们为上面的层次结构创建三个类:

文件:Employee.java

package com.yiibai;

public class Employee {

private int id;

private String name;

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;

}

}

文件:Regular_Employee.java

package com.yiibai;

/**

*

* @author by maxsu

* @copyright http://www.yiibai.com

* @link download at: http://www.yiibai.com/siteinfo/download.html

*/

public class Regular_Employee extends Employee {

private float salary;

private int bonus;

public float getSalary() {

return salary;

}

public void setSalary(float salary) {

this.salary = salary;

}

public int getBonus() {

return bonus;

}

public void setBonus(int bonus) {

this.bonus = bonus;

}

}

文件:Contract_Employee.java

package com.yiibai;

/**

*

* @author by maxsu

* @copyright http://www.yiibai.com

* @link download at: http://www.yiibai.com/siteinfo/download.html

*/

public class Contract_Employee extends Employee {

private float pay_per_hour;

private String contract_duration;

public float getPay_per_hour() {

return pay_per_hour;

}

public void setPay_per_hour(float payPerHour) {

pay_per_hour = payPerHour;

}

public String getContract_duration() {

return contract_duration;

}

public void setContract_duration(String contractDuration) {

contract_duration = contractDuration;

}

}

2)创建持久类的映射文件

上面已经了解了层次结构,接下来看看映射配置。

文件:employee.hbm.xml

/p>

"-//Hibernate/Hibernate Mapping DTD 3.0//EN"

"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

table="regemp122">

table="contemp122">

3)在配置文件中添加hbm文件的映射

打开hibernate.cfg.xml文件,并添加如下映射资源的项:

现在配置文件将如下所示:

文件:hibernate.cfg.xml

/p>

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

"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

update

com.mysql.jdbc.Driver

jdbc:mysql://localhost:3306/test

root

123456

org.hibernate.dialect.MySQL5InnoDBDialect

true

hbm2ddl.auto属性定义是用于在数据库中创建自动表。

4)创建存储持久对象的类

在这个类中,我们只是将Employee 对象存储在数据库表中。

文件:MainTest.java

package com.yiibai;

import org.hibernate.*;

import org.hibernate.boot.MetadataSources;

import org.hibernate.boot.registry.StandardServiceRegistry;

import org.hibernate.boot.registry.StandardServiceRegistryBuilder;

/**

*

* @author by maxsu

* @copyright http://www.yiibai.com

* @link download at: http://www.yiibai.com/siteinfo/download.html

*/

public class MainTest {

public static void main(String[] args) {

// 但在5.1.0版本汇总,hibernate则采用如下新方式获取:

// 1. 配置类型安全的准服务注册类,这是当前应用的单例对象,不作修改,所以声明为final

// 在configure("cfg/hibernate.cfg.xml")方法中,如果不指定资源路径,默认在类路径下寻找名为hibernate.cfg.xml的文件

final StandardServiceRegistry registry = new StandardServiceRegistryBuilder()

.configure("hibernate.cfg.xml").build();

// 2. 根据服务注册类创建一个元数据资源集,同时构建元数据并生成应用一般唯一的的session工厂

SessionFactory sessionFactory = new MetadataSources(registry)

.buildMetadata().buildSessionFactory();

/**** 上面是配置准备,下面开始我们的数据库操作 ******/

Session session = sessionFactory.openSession();// 从会话工厂获取一个session

// creating transaction object

Transaction t = session.beginTransaction();

Employee e1 = new Employee();

e1.setName("用户名-01");

Regular_Employee e2 = new Regular_Employee();

e2.setName("yiibai su");

e2.setSalary(50002);

e2.setBonus(5);

Contract_Employee e3 = new Contract_Employee();

e3.setName("Mina su");

e3.setPay_per_hour(1010);

e3.setContract_duration("15 hours");

session.persist(e1);

session.persist(e2);

session.persist(e3);

t.commit();

session.close();

System.out.println("success");

}

}

执行上面代码运行测试即可,应该会自动创建三张表,并插入数据。

¥ 我要打赏

纠错/补充

收藏

加QQ群啦,易百教程官方技术学习群

注意:建议每个人选自己的技术方向加群,同一个QQ最多限加 3 个群。

使用hibernate映射oracle两个表空间的表,Hibernate每个具体类一张表映射(使用XML)相关推荐

  1. hibernate继承关系映射方法(三)--每个具体类一张表TPC

    TPC:所谓是"每个具体类一张表(table per concrete class)"的意思是:使继承体系中每一个子类都对应数据库中的一张表.每一个子类对应的数据库表都包含了父类的 ...

  2. 查看Oracle数据库表空间大小(空闲、已使用),是否要增加表空间的数据文件

    http://suan2046.iteye.com/blog/379539 标题:查看Oracle数据库表空间大小,是否需要增加表空间的数据文件 在数据库管理中,磁盘空间不足是DBA都会遇到的问题,问 ...

  3. excel比较两个表中数据 提取相同列 合并到同一张表中

    比较两个表中数据 提取相同列 合并到同一张表中 =VLOOKUP(A2,Sheet3!A:B,1,0) A2:表示 被查找的值 Sheet3!:表示哪张表 A:B:表示查找区域 1:表示提取哪列的值 ...

  4. mysql 表空间监控shell_一种通过zabbix监控mysql表空间的方法

    一种通过zabbix监控mysql表空间的方法[ 技术领域: ][0001]本发明涉及计算机自动化运维与监控领域,具体地说是一种通过ZABBIX监控MYSQL表空间的方法.[ 背景技术: ][0002 ...

  5. 解决两张表关联,一张表插入一条新数据,另外一张表也跟着插入一条新数据问题

    1.问题描述 已知现在有两张表,分别是 user // 用来存放储户的信息 card // 用来存放银行卡的信息 现在要求在给新增一个用户的时候提示给他办理一张银行卡 2. 问题解决 思路:新增用户好 ...

  6. flowable实战(十二)flowable 核心表ACT_RU_EXECUTION 详解(初学者误解的一张表)

    一.ACT_RU_EXECUTION 表(很多初学者迷惑的一张表,以为是流程实例表,其实它叫执行实例表):这个表和act_run_task表,一起控制了用户任务的产生与完成等. 这个表是工作流程的核心 ...

  7. mysql 把一个字段的值_mysql把一个表某个字段的内容复制到另一张表的某个字段的SQL语句写法...

    需求:把一个表某个字段内容复制到另一张表的某个字段. 实现sql语句1: UPDATE file_manager_folder f1 LEFT OUTER JOIN file_manager_fold ...

  8. 多对多关系需要建立中间表_【数据库基础】为什么需要三张表之多对多表结构设计...

    了解完一对一和一对多表结构设计,接下来一起了解一下多对多的表结构设计. 同样,咱们先来想一般什么场景需要用到多对多.假如说咱们有一个叫订单和一个叫商品的这两张表,这两张表的关系,它其实就是一个多对多的 ...

  9. php中rbac三张表的关系,财务人不可不知的三张表的关系

    原标题:财务人不可不知的三张表的关系 本文节选自<世界500强CFO的财务管理笔记>,作者郑永强资产负债表.利润表.现金流量表是三张最基本也是最重要的财务报表.这三者之间究竟是怎样的关系呢 ...

最新文章

  1. Git之深入解析如何通过GPG签署和验证工作
  2. 拼多多4.5元手表使用功能图
  3. Java的getAverage,Java IntSummaryStatistics getAverage()用法及代码示例
  4. Ruby中require,load,和include的区别
  5. Shell脚本中函数位置参数的用法笔记
  6. 在服务器系统怎么设置地址怎么办,路由器怎么设置地址
  7. Java 数组插入元素
  8. MySql 查询显示
  9. 鸿蒙JSFA 使用 WebView
  10. 【ms access】SQL 引用外部表
  11. python 生成nc文件_Python生成器处理大文本文件的代码
  12. 【中秋福利】Linux系统从入门到精通推荐的书籍——中秋限时送书活动
  13. ecshop 影响全局的标量lib_main.php
  14. Windows Terminal美化教程
  15. 计算机网络CDMA是什么,CDMA是什么
  16. java isbn_Java ISBN formating
  17. aardio - f()函数通过变量名将变量值整合到一串文本中
  18. 普通高等学校毕业生就业工作暂行规定
  19. hihocoder #1163 : 博弈游戏·Nim游戏
  20. 以连边为中心的功能连接用于个体识别

热门文章

  1. 电影院同场不同价 你愿意为“黄金座位”买单吗
  2. Kindle2018 一周使用报告
  3. 全志科技A40i国产开发板——性能参数综合测试
  4. office2016 Excel 打开“宏”分三步
  5. 华为也无奈,P20pro降到历史新低价,老用户:买太早
  6. 給windowsXP穿上Linux Ubuntu的漂亮馬甲 1
  7. 动态规划java实现数塔问题_动态规划入门_数塔问题
  8. mysql useing_mysql中using where,using index
  9. 达人评测 联想小新Pro16和小米笔记本Pro15选哪个好
  10. 单反相机坏点和噪点测试软件,单反相机验机及坏点测试方法(多数适用于佳能)...