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

时间:2015-06-25 19:55:55

标签: java hibernate jpa

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

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

2 个答案:

答案 0 :(得分:1)

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

使用 mappedBY

执行保存操作

使用mappedBy创建实体时,也会在子对象中创建父对象,然后执行保存操作。 休眠在后台的作用:-

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

使用 @JoinColumn

执行保存操作

使用@JoinColumn创建实体时,不会在子对象中创建父对象。 休眠在后台的作用:-

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

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

基本上,@ JoinColumn通过额外的Update操作完成与mappingBy相同的工作。 因此,mappedBy的性能肯定优于@JoinColumn。

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

答案 1 :(得分:0)

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