Hibernate双向一对一对象关系模型映射
一个员工一辆车:one-to-one
实现一:让汽车表中的外键唯一
create table emp
(
eid int primary key auto_increment,
ename varchar
);
create table car
(
cid int primary key auto_increment,
cnumber varchar,
eid int,
constraint fk_eid foreign key(eid) referecnces emp(eid),
constraint uk_eid unique(eid)
);
实现二:让汽车表中的主键引用员工表的主键,汽车表中的主键也充当外键
create table emp
(
eid int primary key auto_increment,
ename varchar
);
create table car
(
cnumber varchar,
cid int,
constraint fk_cid foreign key(cid) referecnces emp(eid),
constraint pk_cid primary key(cid)
);
2.1描述java的数据模型

2.2配置pojo类

2.3数据库的数据模型

2.4进行curd操作
2.4.1 添加员工
/**
* 添加员工信息
* ****/
@Test
public void saveEmp()
{
//获得Session
Session session=sf.openSession();
//开启事务
Transaction tr=session.beginTransaction();
//创建员工对象
Emp emp= new Emp();
emp.setEname("张三");
session.save(emp);
//提交事务
tr.commit();
//释放资源
session.close();
}
2.4.2添加车辆信息
/**
* 添加车辆信息
* ****/
@Test
public void saveCar()
{
//获得Session
Session session=sf.openSession();
//开启事务
Transaction tr=session.beginTransaction();
//创建汽车对象
Car car = new Car();
car.setCname("奥拓");
//创建员工对象
Emp emp=new Emp();
emp.setEid(1); //给定的id数据库必须存在[A1]
//指定汽车对应的员工
car.setEmp(emp);
session.save(car);
//提交事务
tr.commit();
//释放资源
session.close();
}
2.4.3 修改员工信息
/**
* 修改员工信息
* ****/
@Test
public void updateEmp()
{
//获得Session
Session session=sf.openSession();
//开启事务
Transaction tr=session.beginTransaction();
//查询员工对象
Emp emp= (Emp) session.get(Emp.class, 1);
emp.setEname("李四");
//获得该员工的车辆对象
Car car = emp.getCar();
car.setCname("VOV");
//提交事务
tr.commit();
//释放资源
session.close();
}
2.4.4添加新员工新车辆
默认的级联效果:因为car的主键需要引用emp的主键,所以emp必须首先进行保存
/**
* 添加车辆和员工信息
* ****/
@Test
public void saveCarEmp()
{
//获得Session
Session session=sf.openSession();
//开启事务
Transaction tr=session.beginTransaction();
//创建汽车对象
Car car = new Car();
car.setCname("奥拓");
//创建员工对象
Emp emp=new Emp();
emp.setEname("王五");
//指定汽车对应的员工
car.setEmp(emp);
session.save(car);
System.out.println("emp--------------"+emp.getEid());
//提交事务
tr.commit();
//释放资源
session.close();
}
2.4.5删除员工信息
/***通过员工删除汽车***/
@Test
public void deleteEmp()
{
//获得Session
Session session=sf.openSession();
//开启事务
Transaction tr=session.beginTransaction();
//查询员工的对象
Emp emp= (Emp) session.get(Emp.class, 1);
//删除子表
session.delete(emp.getCar());
//删除主表
session.delete(emp);
//提交事务
tr.commit();
//释放资源
session.close();
}
2.4.6查询员工信息
员工姓名 车辆名称
/***查询员工信息***/
@Test
public void selectEmp()
{
//获得Session
Session session=sf.openSession();
//开启事务
Transaction tr=session.beginTransaction();
//查询员工的对象
List<Emp> elist=session.createCriteria(Emp.class).list();
for(Emp e:elist){
System.out.println(e.getEname()+"\t"+e.getCar().getCname());
}
//提交事务
tr.commit();
//释放资源
session.close();
}
Emp的id必须在数据库存在,而且某个员工的id只能使用一次。
Emp的id是cari的主键和外键
Hibernate双向一对一对象关系模型映射的更多相关文章
- Hibernate双向多对多对象关系模型映射
1 双向many-to-many 业务模型: 描述员工和项目 一个员工同时可以参与多个项目 一个项目中可以包含多个员工 分析:数据库的数据模型,通过中间关系表,建立两个one-to-many构成man ...
- Hibernate双向一对多对象关系模型映射
双向one-to-many 描述部门和岗位:一个部门有多个岗位 将单向的one-to-many 和many-to-one合并. 4.1双向的one-to-many数据库模型 create table ...
- Hibernate单向一对多对象关系模型映射
1 hibernate 的对象关系映射 Orm: 类-----表 属性------字段 对象------记录 表:在数据库中存在主外键的关系,反向工厂类是由表生成,在由表生成类的时候,类和类之间存在者 ...
- Hibernate单向多对一对象关系模型映射
单向的many-to-one 案例: 班级和学生 父亲和子女 单向:只能由其中一方维护关系 Many-to-one中有many的一方法维护或者体现两者之间的关系. 单向的many-to-one描述学生 ...
- python下申明式的对象关系DB映射器--Pony
之前看到了Sails.js的waterline提供了声明式的关系型对象与DB的映射器,惊为天人,可以说是极大地提升了效率. 利用waterline的对象关系模型,用户可以直接使用javascript语 ...
- Hibernate (开源对象关系映射框架)
一.基本介绍1.它对JDBC进行了非常轻量级的对象封装,它将POJO与数据库表建立映射关系,是一个全自动的orm(对象关系映射)框架,hibernate可以自动生成SQL语句,自动执行: Hibern ...
- Hibernate的核心对象关系映射
Hibernate的核心就是对象关系映射: 加载映射文件的两种方式: 第一种:<mapping resource="com/bie/lesson02/crud/po/employee. ...
- ORM对象/关系模型
1 ORM 对象关系映射(ORM)提供了概念性的.易于理解的模型化数据的方法.ORM方法论基于三个核心原则: 简单:以最基本的形式建模数据. 传达性:数据库结构被任何人都能理解的语言文档化. 精确性: ...
- Django之ORM对象关系模型
MVC或者MVC框架中包括一个重要的部分,就是ORM,它实现了数据模型与数据库的解耦,即数据模型的设计不需要依赖于特定的数据库,通过简单的配置就可以轻松更换数据库,这极大的减轻了开发人员的工作量,不需 ...
随机推荐
- 机器码call和jmp地址的计算
call和jmp都是跳转指令,但是call的同时会把pc地址压入堆栈,并且这两种方式都有远和近跳转.下面的分析不全,因为没有在网上找到足够的资料,个人创造这个情景还是有些困难. 1.例子中的call的 ...
- AlwaysOn可用组基础知识
AlwaysOn可用组概念 AlwaysOn作为SQL Server2012新功能,其目的主要为了替代镜像功能. AlwaysOn拥有镜像的同步和异地容灾功能,并能在镜像的基础上实现一对多的镜像副本同 ...
- NHibernate配置
因为NHibernate被设计为可以在许多不同环境下工作,所以它有很多配置参数.幸运的是,大部分都已经有默认值了. NHibernate.Test.dll包含了一个示例的配置文件app.config, ...
- js跳转页面
<script type="text/javascript"> 方法一: location.href = 'http://www.baidu.com'; 方法二: l ...
- 文字的多列布局--column
- LR测试登陆后进行的操作时 绕过登录
oadrunner web_add_cookie web_add_cookie 这个的函数原来真的能过逃过登录,哈哈,这个苦苦纠结我的问题呀. 函数原型:int web_add_cookie( con ...
- wp手机 htc x310e
入手htc x310e 手机不错,用着流畅 不习惯,已升到wp7.8,系统限制还是有些需要的功能没有,比如说短信拦截什么的 我需要的常用软件少 转手了 1 注销windows live? 设置--应用 ...
- OpenCV人形检测Hog
#include "iostream" #include "queue" using namespace std; #include "opencv2 ...
- qt-5.6.0 移植之qt源码编译
其实这只是给自己看的一个configure选项笔记,没有太多的东西. 首先: 下载qt5.6的源码: 地址: http://download.qt.io/archive/qt/5.6/ 下载完解压: ...
- linux kernel 杂谈
首先介绍一下背景吧,工作三个星期了.复习了一波u-boot,跟了一下事件上报,搞了下平台设备,扣了一个内存检查代码. 想想生活是不是有点无聊.对啊,真的很无聊!!!! 无聊也没有办法啊,所以找点方法去 ...