hibernate一对多、多对多级联保存与级联删除与修改外键

时间:2021-02-03 20:58:23

1、一对多复杂写法级联保存

//创建一个公司对象,为公司对象添加员工

        GongsiEntity gongsi=new GongsiEntity();
        gongsi.setGname("百度");
        YuangongEntity yuangong=new YuangongEntity();
        yuangong.setYname("001");
        //建立公司与员工的关系
        //1、把员工放进公司的set集合里面
        gongsi.getYuangongSet().add(yuangong);
        //2、把公司放到员工里面
        yuangong.setGongsiEntity(gongsi);
        //保存到数据库
        session.save(gongsi);

        session.save(yuangong);

2、一对多简单写法级联保存(常用)

(1)在公司映射文件中进行配置
在set标签中添加属性cascade,属性值为save-update
(2)创建公司和员工对象,只需要把员工放到公司里面就可以了,最终只需要保存公司就可以了

3、一对多级联删除

(1)删除某个公司对象,把里面的员工也删除
(2)具体实现
1、在公司映射文件set标签的cascade的属性值添加delete
2、在代码中直接删除
GongsiEntity gongsi=(GongsiEntity)session.get(GongsiEntity.class,1);
        session.delete(gongsi);

4、一对多修改外键

(1)需要获取员工对象和公司对象,重新设置关系

//根据id查询
        YuangongEntity yuangong=(YuangongEntity)session.get(YuangongEntity.class,3);
        GongsiEntity guge=(GongsiEntity)session.get(GongsiEntity.class,2);
        //把员工放到其他公司
        guge.getYuangongSet().add(yuangong);
        yuangong.setGongsiEntity(guge);

5、多对多级联保存

根据订单保存商品
1、在订单配置文件中set标签进行配置cascade值save_update
2、代码实现
创建订单和商品对象,把商品放到订单中,保存订单即可

6、多对多级联删除(了解,不常用)

与上面类似,需要在set标签配置cascade属性值为delete,
然后直接代码查询删除


7、多对多维护第三张表(关系表)


订单和商品多对多关系,维护关系通过第三张表
1、让某个订单有某个商品
(1)根据id查询出订单和商品
(2)把商品放到订单的set集合里面
2、让某个订单没有某个商品
(1)根据id查询出订单和商品
(2)把商品从订单的set集合中移除