一尘不染

JPA:何时选择多值关联与元素集合映射

hibernate

我想更好地了解之间的区别

(1)传统的 多值关系/关联

   @Entity -> @OneToMany -> @Entity

(2) 可嵌入(和基本)类型 的JPA2 集合

  @Entity -> @ElementCollection -> @Embeddable

我看到了语法上的差异,但想知道是否还会 影响性能 。在后台,数据库实现看起来非常相似。

凭直觉,我通常会使用@ElementCollectionfor 组成方案 。但是即使那样感觉也很相似CascadeType=DELETE

我在这里错过了本质吗?在某些方面,一个比另一个更有效吗?

谢谢你J


阅读 230

收藏
2020-06-20

共1个答案

一尘不染

凭直觉,我通常将@ElementCollection用于合成方案。但这甚至感觉非常像CascadeType = DELETE

它们相似,但略有不同。Java Persistence
Wikibook
ElementCollection页面对其进行了很好的总结:

嵌入式收藏

ElementCollection映射可以被用来定义的集合
Embeddable的对象。这不是Embeddable对象的典型用法,因为对象没有 嵌入 到源对象的表中,而是存储在单独的收集表中。类似于a
OneToMany,不同之处在于目标对象是Embeddable而不是Entity。这使简单对象的集合易于定义,而无需简单对象定义
逆映射IdManyToOne逆映射。ElementCollection还可以覆盖映射或表以获取其集合,因此您可以让多个实体引用同一Embeddable类,但是每个实体
都将其依赖对象存储在单独的表中。

使用a ElementCollection代替a 的局限性
OneToMany在于,不能独立于其父对象来查询,持久化和合并目标对象。它们是严格私有的(从属)对象,与Embedded映射相同
cascade 在上ElementCollection,它们是不可选项,目标对象始终与其父对象保持,合并或删除。
ElementCollection仍然可以使用访存类型,并且默认LAZY与其他集合映射相同。

也可以看看

2020-06-20