华南理工大学无线电爱好者协会软件小组Java学习笔记程序员

Hibernate 关联关系映射

2017-02-08  本文已影响316人  廖少少

本文包括:

1、一对多结构的准备

2、双向关联与单向关联

3、级联保存

4、级联删除

5、cascade 属性——级联

6、inverse 属性——放弃外键的维护

7、多对多结构的准备

8、多对多结构的级联

1、一对多结构的准备

2、双向关联与单向关联

3、级联保存

4、级联删除

5、cascade 属性——级联

6、inverse 属性——放弃外键的维护

  1. 在之前的例子中,默认双方都维护外键,会产生多余的SQL语句。

    • 现象:想修改客户和联系人的关系,进行双向关联,双方都会维护外键,会产生多余的SQL语句。

    • 原因:session 的一级缓存中的快照机制,会让双方都更新数据库,产生了多余的 SQL 语句。

  2. 如果不想产生多余的SQL语句,那么需要一方来放弃外键的维护,通常是“一”方来放弃外键的维护,于是在“一”方的配置文件中这样编写:

    • 在<set>标签上配置一个 inverse="true" :true:放弃;false:不放弃;默认值是 false

        <inverse="true">
      

    注意:在一对多的情况下,可以不放弃外键的维护,但是下节开始的多对多表结构必须有一方放弃外键的维护。

  3. cascade 和 inverse 的区别

    • cascade 用来级联操作(保存、修改和删除)

    • inverse 用来维护外键

      举例:若 Customer 同时配置 cascade="save-update"<inverse="true">,当保存一个 Customer 对象时,数据库也会同时保存 Linkman 对象(级联保存的功劳),但是该 Linkman 对象的外键是空的。

    注意:在实际情况中,大部分情况是:“一”方配置 <inverse="true"> ,“多”方配置 cascade="save-update"

7、多对多结构的准备

8、多对多结构的级联

上一篇下一篇

猜你喜欢

热点阅读