Hibernate 3 关系映射

Hibernate 3 关系映射

映射文件配置

//one-to-many映射文件配置
<set name = "少的一方的属性名" cascade=“save-update”>
  <key colume="多的一方的属性名"></key>
  <one-to-many class="多的一方的类全路径"/>
</set>

//many-to-one映射文件的配置
<many-to-one name="多的一方的属性" cascade="" class="少的一方的类全路径名" colume="少的一方的属性名"/>

一对多相关操作

  • 级联操作是指当主控方执行保存、更新或者删除操作时,被关联对象也执行相同的操作

  • 映射文件cascade设置

    • save-update:保存或更新操作
  • A关联了B,B关联了C和D(假设都是对应的insert语句)

    • 执行save(A),四条insert语句
    • 执行save(B),三条
    • 执行save(C),一条,因为没有关联谁,只有被关联的关系
  • 级联删除

    • JDBC中,有外键的话,是不可以进行删除操作的
    • Hibernate可以删除,但不会删除被关联的另一方,而是将被关联对象的外键设为null
    • cascade设置可以使得两方同时被删除
      • delete:在删除时同时删除两方
  • 双向关联产生多余的SQL语句

    • 缓冲区和快照区数据不一致可能导致执行两次update语句
    • 解决方法
      • 通常让多的一方进行维护,而少的一方放弃维护权
      • inverse=“true”:表示放弃维护权,配置在少的一方
  • cascade和inverse的区别

    • cascade强调的是操作一个对象的时候,是否操作其关联对象
    • inverse强调的是外键的维护权
    • 如:
      • customer配置了cascade和inverse
      • customer A关联了B
      • save(A)时,会自动进行save(B)操作,这是cascade起作用
      • 而存储进数据库的B没有外键,这是inverse起作用

多(A)对多(B)

  • 新建一张表C,表的两项对应A和B的主键
  • 映射文件配置
<set name="属性名" table="C">
  <key column="C的一项,如user_id"/>
  <many-to-many class="关联的另一方B的全路径" column="c的主键"/>
</set>
  • 核心配置文件加入映射文件
<mapping resource="A的映射文件"/>
<mapping resource="C的映射文件"/>
  • 如果进行双向维护,即两方都配置了映射文件,那么需要一方放弃维护权
  • 多对多操作
    • 级联保存保存或更新或删除
      • 与一对多相同,使用cascade,参数值为save-update,delete
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值