首页 > 代码库 > 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 中的 单向 一 对多 关系