繁体   English   中英

使用 joinColumn 而不是 mapsBy 有什么危害?

[英]What harm does using joinColumn instead of mappedBy do?

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

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

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

使用mappedBY执行保存操作

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

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

使用@JoinColumn执行保存操作

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

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

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

基本上@JoinColumn 和mappedBy 做同样的工作,并带有额外的更新操作。 所以,mappedBy 的性能肯定比@JoinColumn 好。

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

这个答案应该作为评论,但我不能添加评论,因为我没有足够的声誉。请参阅 JPA JoinColumn 与 mappingBy

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM