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


    双向one-to-many

    描述部门和岗位:一个部门有多个岗位

    将单向的one-to-many 和many-to-one合并。

    4.1双向的one-to-many数据库模型

     1 create table department
     2 (
     3     did int,
     4     dname varchar
     5 );
     6 create table work
     7 (
     8     id int,
     9     pname varchar,
    10     did int,
    11     constraint fk_did foreign key(did) references department(did)
    12 );

    数据库中部门表和员工表构成主外键关系。

     

    4.2产生java中的数据模型

     

    4.3双向one-to-many配置

     

    4.4进行curd操作

    4.4.1添加部门信息

     1 /**
     2  * 增加部门信息
     3  * ***/
     4 @Test
     5 public void  addDept()
     6 {
     7     //获得Session对象
     8     Session session=sf.openSession();
     9     //开启事务
    10     Transaction tr = session.beginTransaction();
    11     //创建部门对象
    12     Dept dept = new Dept();
    13     dept.setDname("研发部");
    14     session.save(dept);
    15     //提交事务
    16     tr.commit();
    17     //释放资源
    18     session.close();
    19 }

    4.4.2新增部门和岗位

     1 /**
     2  * 增加部门信息和岗位信息
     3  * 只在双向映射进行inverse的配置
     4  * inverse:表示双方由谁维护两者之间的关系
     5  * 默认:false 不反转,自己维护
     6  * true:表示控制权的反转(交出),由对方进行维护
     7  *
     8  * one-to-many:处理交给many的一方进行关系的控制。
     9  *
    10  * ***/
    11 @Test
    12 public void  addDeptPost()
    13 {
    14     //获得Session对象
    15     Session session=sf.openSession();
    16     //开启事务
    17     Transaction tr = session.beginTransaction();
    18     //创建部门对象
    19     Dept dept = new Dept();
    20     dept.setDname("安慰部22");
    21     //创建岗位对象
    22     Post p=new Post();
    23     p.setPname("逗你玩22");
    24     //实现了岗位的级联保存
    25     dept.getPosts().add(p);
    26     //如果关系进行反转,由岗位进行了控制,建立关系
    27     p.setDept(dept);
    28     session.save(dept);
    29     //提交事务
    30     tr.commit();
    31     //释放资源
    32     session.close();
    33 }

    4.4.3删除部门信息

     1 /**
     2      只删除岗位信息,不删除部门信息
     3  ****/
     4 @Test
     5 public void  deleteDept2()
     6 {
     7     //获得Session对象
     8     Session session=sf.openSession();
     9     //开启事务
    10     Transaction tr = session.beginTransaction();
    11     //查询部门对象
    12     Dept dept = (Dept) session.get(Dept.class, 8);
    13     //创建岗位对象
    14     Post p=new Post();
    15     p.setPid(5);
    16     /**
    17      * 删除与dept解除关系的post对象
    18      * ***/
    19     //解除该部门下某个岗位和部门的关系
    20     dept.getPosts().remove(p);
    21     //提交事务
    22     tr.commit();
    23     //释放资源
    24     session.close();
    25 }
  • 相关阅读:
    Redpine的Lite-Fi解决方案获Wi-Fi CERTIFIED认证
    植物园偶遇一直喵
    美食篇
    端午节路过南站
    黄山云海
    一品黄山 天高云淡
    黄山的日出日落
    宏村,寻找你的前世今生
    git把本地文件上传到github上的步骤
    一张照片一个故事
  • 原文地址:https://www.cnblogs.com/guanghe/p/6094948.html
Copyright © 2020-2023  润新知