一个员工一辆车: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双向一对一对象关系模型映射的更多相关文章

  1. Hibernate双向多对多对象关系模型映射

    1 双向many-to-many 业务模型: 描述员工和项目 一个员工同时可以参与多个项目 一个项目中可以包含多个员工 分析:数据库的数据模型,通过中间关系表,建立两个one-to-many构成man ...

  2. Hibernate双向一对多对象关系模型映射

    双向one-to-many 描述部门和岗位:一个部门有多个岗位 将单向的one-to-many 和many-to-one合并. 4.1双向的one-to-many数据库模型 create table ...

  3. Hibernate单向一对多对象关系模型映射

    1 hibernate 的对象关系映射 Orm: 类-----表 属性------字段 对象------记录 表:在数据库中存在主外键的关系,反向工厂类是由表生成,在由表生成类的时候,类和类之间存在者 ...

  4. Hibernate单向多对一对象关系模型映射

    单向的many-to-one 案例: 班级和学生 父亲和子女 单向:只能由其中一方维护关系 Many-to-one中有many的一方法维护或者体现两者之间的关系. 单向的many-to-one描述学生 ...

  5. python下申明式的对象关系DB映射器--Pony

    之前看到了Sails.js的waterline提供了声明式的关系型对象与DB的映射器,惊为天人,可以说是极大地提升了效率. 利用waterline的对象关系模型,用户可以直接使用javascript语 ...

  6. Hibernate (开源对象关系映射框架)

    一.基本介绍1.它对JDBC进行了非常轻量级的对象封装,它将POJO与数据库表建立映射关系,是一个全自动的orm(对象关系映射)框架,hibernate可以自动生成SQL语句,自动执行: Hibern ...

  7. Hibernate的核心对象关系映射

    Hibernate的核心就是对象关系映射: 加载映射文件的两种方式: 第一种:<mapping resource="com/bie/lesson02/crud/po/employee. ...

  8. ORM对象/关系模型

    1 ORM 对象关系映射(ORM)提供了概念性的.易于理解的模型化数据的方法.ORM方法论基于三个核心原则: 简单:以最基本的形式建模数据. 传达性:数据库结构被任何人都能理解的语言文档化. 精确性: ...

  9. Django之ORM对象关系模型

    MVC或者MVC框架中包括一个重要的部分,就是ORM,它实现了数据模型与数据库的解耦,即数据模型的设计不需要依赖于特定的数据库,通过简单的配置就可以轻松更换数据库,这极大的减轻了开发人员的工作量,不需 ...

随机推荐

  1. Python 集合set添加删除、交集、并集、集合操作符号

    在Python中集合set是基本数据类型的一种,它有可变集合(set)和不可变集合(frozenset)两种.创建集合set.集合set添加.集合删除.交集.并集.差集的操作都是非常实用的方法. 1. ...

  2. Javascript高级程序设计——函数内部属性与函数属性

    函数内部属性 函数内部有两个特殊的属性arguments和this.其中,arguments是类数组对象,包含传入函数中的所有值,这个arguments还有一个属性:callee,这个属性是一个指针, ...

  3. hexo问题篇(偶尔抽抽疯)

    hexo安安稳稳的跑了很久,然后 ....让人心碎的hexo问题,华丽丽的摔倒在坑里,只因update了hexo version最是哪一句 hexo server让人欲哭无泪 -问题场景 设备: Ma ...

  4. android socket编程用Bufferreader读取的一个失败教训

    由于我的手机需要用笔记本开的wifi,躺在床上玩手机时需要关电脑或者是要让电脑放歌的时候总是不想下床,于是我想能不能用一个APP,然后通过局域网实现在手机上对电脑进行操控呢?说干就干. 我在电脑上用的 ...

  5. 解决ubuntu每次重启屏幕亮度都重置为最高亮度问题

    很多朋友都会碰到这个问题,Ubuntu系统,每次通过系统设置修改了屏幕亮度,重启系统都会将屏幕亮度调成最大值,很是苦恼. 上网搜索一番发现,修改屏幕亮度的文件是:/sys/class/backligh ...

  6. JQGrid 参数、属性API

    JQGrid是一个在jquery基础上做的一个表格控件,以ajax的方式和服务器端通信. JQGrid Demo 是一个在线的演示项目.在这里,可以知道jqgrid可以做什么事情. 下面是转自其他人b ...

  7. 内网安全工具之hscan扫描

    工具下载地址:hscan1.2.zip 界面简单,看配置: 这里我们主要需要配置的是模块和参数 模块,按照默认配置就行,取消 check HTTP vulnerability(漏洞检测) 会更快一点. ...

  8. OOP复习笔记

    /*OOP相关的代名词不做讲解*/ OOP的三大特征: 封装 - 继承 - 多态 -----------------------------------目录---------------------- ...

  9. sql server 2008 R2 不允许保存更改,您所做的更改要求删除并重新创建以下表

    点击菜单栏 [工具]->[选项] 进入如下界面: 将阻止保存要求重新创建表的更改 的勾去掉即可.

  10. JavaScript深入浅出2-表达式和运算符

    慕课网教程视频地址:Javascript深入浅出 表达式是指能计算出值的任何可用程序单元 原始表达式:常量.直接量 3.14,“test” 关键字 null,this 变量 i,k,j 表达式含:原始 ...