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的主键和外键

  • 相关阅读:
    JavaScript学习总结(5)——Javascript面向(基于)对象编程
    JavaScript学习总结(4)——JavaScript数组
    高性能Web动画和渲染原理系列(4)“Compositor-Pipeline演讲PPT”学习摘要【华为云技术分享】
    AI:为你写诗,为你做不可能的事
    鲲鹏性能优化十板斧(二)——CPU与内存子系统性能调优
    鲲鹏性能优化十板斧——鲲鹏处理器NUMA简介与性能调优五步法
    华为鲲鹏云之我见
    一站式应用平台,华为云实现自动化构建知识图谱
    化鲲为鹏,我有话说 ,鲲鹏ARM架构的优势
    【读一本书】《昇腾AI处理器架构与编程》--神经网络基本知识学习(1)
  • 原文地址:https://www.cnblogs.com/guanghe/p/6099200.html
Copyright © 2011-2022 走看看