当前位置: 首页 > 知识库问答 >
问题:

使用joinColumn而不是mappedBy有什么坏处?

杨良才
2023-03-14

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

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

共有1个答案

袁奇逸
2023-03-14

我同时练习了@JoinColumn和mappedBy,下面是我在分析hibernate日志时发现的内容。

使用mappedBY执行保存操作

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

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

使用@JoinColumn执行保存操作

使用@JoinColumn创建实体时,不会在子对象中创建父对象。hibernate在后台做的事情:-

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

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

基本上,@JoinColumn与mappedBy执行相同的工作,需要额外的更新操作。因此,mappedBy的性能绝对优于@JoinColumn。

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

 类似资料:
  • 我刚开始冬眠。我有一个与帐户和交易之间的双向映射的单人关系。我没有在这两个类中使用@JoinColumn,而在非所有者Account类中使用@MappedBy。一切正常。使用内存数据库中的H2,在事务表中创建新的联接列。那么@JoinColumn在OneToMany关系中有什么用--它仅仅用于单向映射吗?下面是代码。我还阅读了使用JPA@OneTomany关联时@JoinColumn和mapped

  • 问题内容: 之间有什么区别? 和 问题答案: 可以在关系的两边使用。 现在的问题是关于使用上侧(极少数情况下)。这里的重点是 物理信息重复 (列名)以及 未优化的SQL查询,这会产生一些其他语句。 根据文件: 由于 多对一的 (几乎)总是 所有者侧 的在JPA规范的双向关系中,一对多关联是通过注解 通过troop属性具有双向的一对多关系。您不必(不必)在侧面定义任何物理映射。 要 以一对多方为拥有

  • 两者之间有什么区别: 而且

  • 问题内容: 我最近才发现Redux。一切看起来不错。在Redux上使用Redux是否有任何弊端,陷阱或妥协?谢谢 问题答案: Redux作者在这里! 我想说的是,您将在使用它时做出以下折衷: 您将需要学习避免突变。 Flux对突变数据毫无疑问,但是Redux不喜欢突变,并且许多与Redux互补的软件包都假定您永远不会突变状态。您可以使用仅限开发人员的软件包(例如redux-immutable-st

  • 版本: 返回一个,其ID为“z”,偏移量为0,默认区域规则。 返回一个,包含ID“utc”和。 例如,在处理时。在这里,我能发现的唯一区别是它的打印方式不同。 我们正在来回地进行代码审查讨论,所以我想这种冲突并不罕见。 它是一个常量(此外,它的偏移量值(0)甚至被缓存)。 由于缺少区域信息,它的开销少了一点。 在UTC时,不需要考虑夏时制时间或历史变化,就像在任何其他时区一样。 因此,对于我迄今为