zoukankan      html  css  js  c++  java
  • 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的主键和外键

  • 相关阅读:
    UVA 10462 Is There A Second Way Left?(次小生成树&Prim&Kruskal)题解
    POJ 1679 The Unique MST (次小生成树)题解
    POJ 2373 Dividing the Path (单调队列优化DP)题解
    BZOJ 2709 迷宫花园
    BZOJ 1270 雷涛的小猫
    BZOJ 2834 回家的路
    BZOJ 2506 calc
    BZOJ 3124 直径
    BZOJ 4416 阶乘字符串
    BZOJ 3930 选数
  • 原文地址:https://www.cnblogs.com/guanghe/p/6099200.html
Copyright © 2011-2022 走看看