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()+"\t"+e.getCar().getCname());
13 }
14 //提交事务
15 tr.commit();
16 //释放资源
17 session.close();
18 }
Emp的id必须在数据库存在,而且某个员工的id只能使用一次。
Emp的id是cari的主键和外键