首页 > 代码库 > Hibernate 中的 单向 一 对多 关系

Hibernate 中的 单向 一 对多 关系

 之前看过 一本书  ,里面介绍 hibernate 的时候 反复强调了 不要  轻易 设置 单向的 一对多 关系

 书中解释的原因是 影响 性能 (生成 的 sql 语句变多)。

    单向的 多 对 1 关系

     外键依赖: 通过在 @ManytoOne 后  跟上 @CasCade 

                    先persist从表记录,再persist主表记录时: 判断 主表没有相应记录的时候,从表等待主表插入记录后再插入(2条sql)

     连接表:

                   两个实体类表 不存在 任何 依赖关系,连接表 依赖 这两个 实体类表。 两个实体类表 数据 哪个先 持久化都可以(没有实体数据插入判断等待过程, 但是 会有   3条 sql 语句---两个实体类数据持久化、连接表信息插入)

    书中 说的 是这种情况 下, 连接表 这种方式 性能 更好。(具体原因见仁见智)

    单向的 1 对 多 关系

     外键依赖

                    级联设置 : 发现@OneToMany 后面 不可以 跟上 @CasCade(CasCadeType.ALL), 会报错。(可能是我设置的方法不对)

                    不设置级联: 先 persist 从表记录,再persist 主表记录: 先持久化从表记录 但不设置外键值,再持久化主表记录,更新 从表那条记录的 外键值(3条sql)

                                      先persist主表记录,再persist从表记录:  先插入主表记录,再插入从表记录但不设置外键值,再 更新 从表这些记录的外键值 (3条sql)

       连接表: 暂不讨论。          

      单向的 1 对多 关系 总是 需要  通过 1来操作 N (除了在hibernate 中直接使用sql)。

      虽然 这在 逻辑 上 是很合理的, 但是程序中 真是 让人难受。

       

      

    

Hibernate 中的 单向 一 对多 关系