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

一个员工一辆车:one-to-one

实现一:让汽车表中的外键唯一

 1 create table emp
 2 (
 3     eid int primary key auto_increment,
 4     ename varchar
 5 );
 6 create table car
 7 (
 8     cid int primary key auto_increment,
 9     cnumber varchar,
10     eid int,
11     constraint fk_eid foreign key(eid) referecnces emp(eid),
12     constraint uk_eid unique(eid)
13 );

实现二:让汽车表中的主键引用员工表的主键,汽车表中的主键也充当外键

 1 create table emp
 2 (
 3     eid int primary key auto_increment,
 4     ename varchar
 5 );
 6 create table car
 7 (
 8     cnumber varchar,
 9     cid int,
10     constraint fk_cid foreign key(cid) referecnces emp(eid),
11     constraint pk_cid primary key(cid)
12 );

2.1描述java的数据模型

 

2.2配置pojo类

  

2.3数据库的数据模型

 

2.4进行curd操作

2.4.1 添加员工

 1 /**
 2  * 添加员工信息
 3  * ****/
 4 @Test
 5 public void saveEmp()
 6 {
 7     //获得Session
 8     Session session=sf.openSession();
 9     //开启事务
10     Transaction tr=session.beginTransaction();
11     //创建员工对象
12     Emp emp= new Emp();
13     emp.setEname("张三");
14     session.save(emp);
15     //提交事务
16     tr.commit();
17     //释放资源
18     session.close();
19 }

2.4.2添加车辆信息

 1 /**
 2  * 添加车辆信息
 3  * ****/
 4 @Test
 5 public void saveCar()
 6 {
 7     //获得Session
 8     Session session=sf.openSession();
 9     //开启事务
10     Transaction tr=session.beginTransaction();
11     //创建汽车对象
12     Car car = new Car();
13     car.setCname("奥拓");
14     //创建员工对象
15     Emp emp=new Emp();
16     emp.setEid(1); //给定的id数据库必须存在[A1] 
17     //指定汽车对应的员工
18     car.setEmp(emp);
19     session.save(car);
20     //提交事务
21     tr.commit();
22     //释放资源
23     session.close();
24 }

2.4.3 修改员工信息

 1 /**
 2  * 修改员工信息
 3  * ****/
 4 @Test
 5 public void updateEmp()
 6 {
 7     //获得Session
 8     Session session=sf.openSession();
 9     //开启事务
10     Transaction tr=session.beginTransaction();
11     //查询员工对象
12     Emp emp= (Emp) session.get(Emp.class, 1);
13     emp.setEname("李四");
14     //获得该员工的车辆对象
15     Car car = emp.getCar();
16     car.setCname("VOV");
17     //提交事务
18     tr.commit();
19     //释放资源
20     session.close();
21 }

2.4.4添加新员工新车辆

默认的级联效果:因为car的主键需要引用emp的主键,所以emp必须首先进行保存

 1 /**
 2  * 添加车辆和员工信息
 3  * ****/
 4 @Test
 5 public void saveCarEmp()
 6 {
 7     //获得Session
 8     Session session=sf.openSession();
 9     //开启事务
10     Transaction tr=session.beginTransaction();
11     //创建汽车对象
12     Car car = new Car();
13     car.setCname("奥拓");
14     //创建员工对象
15     Emp emp=new Emp();
16     emp.setEname("王五");
17     //指定汽车对应的员工
18     car.setEmp(emp);
19     session.save(car);
20     System.out.println("emp--------------"+emp.getEid());
21     //提交事务
22     tr.commit();
23     //释放资源
24     session.close();
25 }

2.4.5删除员工信息

 1 /***通过员工删除汽车***/
 2 @Test
 3 public void deleteEmp()
 4 {
 5     //获得Session
 6     Session session=sf.openSession();
 7     //开启事务
 8     Transaction tr=session.beginTransaction();
 9     //查询员工的对象
10     Emp emp= (Emp) session.get(Emp.class, 1);
11     //删除子表
12     session.delete(emp.getCar());
13     //删除主表
14     session.delete(emp);
15     //提交事务
16     tr.commit();
17     //释放资源
18     session.close();
19 }

2.4.6查询员工信息

员工姓名     车辆名称

 1 /***查询员工信息***/
 2 @Test
 3 public void selectEmp()
 4 {
 5     //获得Session
 6     Session session=sf.openSession();
 7     //开启事务
 8     Transaction tr=session.beginTransaction();
 9     //查询员工的对象
10     List<Emp> elist=session.createCriteria(Emp.class).list();
11     for(Emp e:elist){
12         System.out.println(e.getEname()+"	"+e.getCar().getCname());
13     }
14     //提交事务
15     tr.commit();
16     //释放资源
17     session.close();
18 }

Emp的id必须在数据库存在,而且某个员工的id只能使用一次。

Emp的id是cari的主键和外键

原文地址:https://www.cnblogs.com/guanghe/p/6099200.html