【问题标题】:What harm does using joinColumn instead of mappedBy do?使用 joinColumn 而不是 mappedBy 有什么危害?
【发布时间】:2015-09-12 14:34:25
【问题描述】:

我了解 JoinColumn 和 mappedBy 的两个 JPA 注释之间的一般区别,并且 oneToMany 关系应该使用 mappedBy。我知道这是为了确保 hibernate(或我正在使用的任何 JPA 工具)识别双向关系,而不是碰巧共享列的两个单向关系。

但是,我想更好地理解为什么这很重要?我认为识别双向关系可以更优化地存储或获取数据,但有人可以给我一个例子吗?如果我有一个包含许多子对象的父对象,并且我使用 JoinColumn 而不是首选的 mappedBy 对其进行注释,那么使用 mappedBy 我会在哪里遭受性能损失?

【问题讨论】:

    标签: java hibernate jpa


    【解决方案1】:

    我在练习 @joincolumn 和 mappedBy 两者,这是我在分析休眠日志时发现的。

    使用 mappedBY

    执行保存操作

    当您使用 mappedBy 创建实体时,您也在子对象中创建父对象,然后执行保存操作。 hibernate 在后台做了什么:-

    1. 对父对象执行插入操作
    2. 对子对象执行插入操作。此时设置父对象的外键引用 仅插入

    使用 @JoinColumn

    执行保存操作

    当您使用@JoinColumn 创建实体时,您不会在子对象中创建父对象。 hibernate 在后台做了什么:-

    1. 对父对象执行插入操作
    2. 对子对象执行插入操作
    3. 执行单独的更新操作以更新所有子对象上的外键引用

    您可以在休眠日志中看到这些操作。

    基本上@JoinColumn 与 mappedBy 执行相同的工作,但需要额外的更新操作。 所以,mappedBy 的性能肯定比@JoinColumn 好。

    但是,如果您创建一个或两个实体,它不会影响,但如果我们必须创建大量数据,它肯定会导致显着的性能问题。

    【讨论】:

      【解决方案2】:

      这个答案应该是评论,但我不能添加评论,因为我没有足够的声誉。参考JPA JoinColumn vs mappedBy

      【讨论】:

      • 我已经通读了所有这些。它没有解决我的问题。我了解 JPA 是如何解释这两者的,但我不知道这实际上对性能有什么影响。在发布这篇文章之前,我已经彻底阅读了链接的帖子,以确保它没有解决我的问题。
      猜你喜欢
      • 2019-10-14
      • 1970-01-01
      • 1970-01-01
      • 2019-07-17
      • 1970-01-01
      • 2020-09-13
      • 2012-08-09
      • 1970-01-01
      相关资源
      最近更新 更多