使用hibernate映射oracle两个表空间的表,Hibernate每个具体类一张表映射(使用XML)
在每个具体类一个表中,数据库中将有三个表但彼此之间没有关系(关联)。 根据具体类策略将表格映射到表有两种方法。
由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)相关推荐
- hibernate继承关系映射方法(三)--每个具体类一张表TPC
TPC:所谓是"每个具体类一张表(table per concrete class)"的意思是:使继承体系中每一个子类都对应数据库中的一张表.每一个子类对应的数据库表都包含了父类的 ...
- 查看Oracle数据库表空间大小(空闲、已使用),是否要增加表空间的数据文件
http://suan2046.iteye.com/blog/379539 标题:查看Oracle数据库表空间大小,是否需要增加表空间的数据文件 在数据库管理中,磁盘空间不足是DBA都会遇到的问题,问 ...
- excel比较两个表中数据 提取相同列 合并到同一张表中
比较两个表中数据 提取相同列 合并到同一张表中 =VLOOKUP(A2,Sheet3!A:B,1,0) A2:表示 被查找的值 Sheet3!:表示哪张表 A:B:表示查找区域 1:表示提取哪列的值 ...
- mysql 表空间监控shell_一种通过zabbix监控mysql表空间的方法
一种通过zabbix监控mysql表空间的方法[ 技术领域: ][0001]本发明涉及计算机自动化运维与监控领域,具体地说是一种通过ZABBIX监控MYSQL表空间的方法.[ 背景技术: ][0002 ...
- 解决两张表关联,一张表插入一条新数据,另外一张表也跟着插入一条新数据问题
1.问题描述 已知现在有两张表,分别是 user // 用来存放储户的信息 card // 用来存放银行卡的信息 现在要求在给新增一个用户的时候提示给他办理一张银行卡 2. 问题解决 思路:新增用户好 ...
- flowable实战(十二)flowable 核心表ACT_RU_EXECUTION 详解(初学者误解的一张表)
一.ACT_RU_EXECUTION 表(很多初学者迷惑的一张表,以为是流程实例表,其实它叫执行实例表):这个表和act_run_task表,一起控制了用户任务的产生与完成等. 这个表是工作流程的核心 ...
- mysql 把一个字段的值_mysql把一个表某个字段的内容复制到另一张表的某个字段的SQL语句写法...
需求:把一个表某个字段内容复制到另一张表的某个字段. 实现sql语句1: UPDATE file_manager_folder f1 LEFT OUTER JOIN file_manager_fold ...
- 多对多关系需要建立中间表_【数据库基础】为什么需要三张表之多对多表结构设计...
了解完一对一和一对多表结构设计,接下来一起了解一下多对多的表结构设计. 同样,咱们先来想一般什么场景需要用到多对多.假如说咱们有一个叫订单和一个叫商品的这两张表,这两张表的关系,它其实就是一个多对多的 ...
- php中rbac三张表的关系,财务人不可不知的三张表的关系
原标题:财务人不可不知的三张表的关系 本文节选自<世界500强CFO的财务管理笔记>,作者郑永强资产负债表.利润表.现金流量表是三张最基本也是最重要的财务报表.这三者之间究竟是怎样的关系呢 ...
最新文章
- Git之深入解析如何通过GPG签署和验证工作
- 拼多多4.5元手表使用功能图
- Java的getAverage,Java IntSummaryStatistics getAverage()用法及代码示例
- Ruby中require,load,和include的区别
- Shell脚本中函数位置参数的用法笔记
- 在服务器系统怎么设置地址怎么办,路由器怎么设置地址
- Java 数组插入元素
- MySql 查询显示
- 鸿蒙JSFA 使用 WebView
- 【ms access】SQL 引用外部表
- python 生成nc文件_Python生成器处理大文本文件的代码
- 【中秋福利】Linux系统从入门到精通推荐的书籍——中秋限时送书活动
- ecshop 影响全局的标量lib_main.php
- Windows Terminal美化教程
- 计算机网络CDMA是什么,CDMA是什么
- java isbn_Java ISBN formating
- aardio - f()函数通过变量名将变量值整合到一串文本中
- 普通高等学校毕业生就业工作暂行规定
- hihocoder #1163 : 博弈游戏·Nim游戏
- 以连边为中心的功能连接用于个体识别
热门文章
- 电影院同场不同价 你愿意为“黄金座位”买单吗
- Kindle2018 一周使用报告
- 全志科技A40i国产开发板——性能参数综合测试
- office2016 Excel 打开“宏”分三步
- 华为也无奈,P20pro降到历史新低价,老用户:买太早
- 給windowsXP穿上Linux Ubuntu的漂亮馬甲 1
- 动态规划java实现数塔问题_动态规划入门_数塔问题
- mysql useing_mysql中using where,using index
- 达人评测 联想小新Pro16和小米笔记本Pro15选哪个好
- 单反相机坏点和噪点测试软件,单反相机验机及坏点测试方法(多数适用于佳能)...