hibernate的多对多(2)

  1. 数据库的多对多
    数据库中不能直接映射多对多
    处理:创建一个桥接表(中间表),将一个多对多关系转换成两个一对多

    注1:数据库多表联接查询
    永远就是二个表的联接查询
    注2:交叉连接
    注3:外连接:left(左)/right(右)/full(左右)
    主从表:连接条件不成立时,主表记录永远保留,与null匹配

  2. hibernate的多对多
    1、hibernate可以直接映射多对多关联关系(看作两个一对多)
    2、级联新增
    inverse属性
    inverse:反方
    book.hbm.xml:inverse=false
    category,hbm.xml:inverse=true
    这两种方式都指的是将级联关系维护的责任交给book对象
    jdbc级联新增需要调2个道方法:
    this.bookDao.add
    this.bookCategoryDao.add

而hibernate只需要一个即可达到效果:
this.bookDao.add

级联新增可能出现的错误:
在这里插入图片描述

假如在级联增加书籍跟类别时,增加的类别是new出来的话,它会报错
      eg:Book book = new Book();
      book.setBookName("时光不老,我们不散");
      book.setPrice(45f);
      Category category = new Category();
      category.setCategoryId(7);
      book.getCategories().add(category);//这是临时态的
      在多对多的关系维护中,hibernate管理的是持久态对象
      应该改为
      book.getCategories().add(this,categoryDao.get(category));
      
      this.bookDao.add(book);

3.级联删除
①:一定要定义一个主控方
②:主控方直接删除
jdbc:
this.bookCategoryDao.delete
this.bookDao.delete
hibernate:
this.bookDao.delete
③:被控方删除
(1):被控方先通过主控方解除多对多关系
book.getCategories().remove(category);
(2):再删除被控方

4.禁用级联删除
cascade=“all”
all=update、save、delete
禁用级联删除把 cascade属性 改为 cascade=“save-update” 即可

5.关联关系编辑,不需要直接操作桥接表,hibernate的主控方会自动维护

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值