我想更好地了解之间的区别
(1)传统的 多值关系/关联
@Entity -> @OneToMany -> @Entity
和
(2) 可嵌入(和基本)类型 的JPA2 集合
@Entity -> @ElementCollection -> @Embeddable
我看到了语法上的差异,但想知道是否还会 影响性能 。在后台,数据库实现看起来非常相似。
凭直觉,我通常会使用@ElementCollectionfor 组成方案 。但是即使那样感觉也很相似CascadeType=DELETE。
@ElementCollection
CascadeType=DELETE
我在这里错过了本质吗?在某些方面,一个比另一个更有效吗?
谢谢你J
凭直觉,我通常将@ElementCollection用于合成方案。但这甚至感觉非常像CascadeType = DELETE
它们相似,但略有不同。Java Persistence Wikibook 的ElementCollection页面对其进行了很好的总结:
嵌入式收藏 的ElementCollection映射可以被用来定义的集合 Embeddable的对象。这不是Embeddable对象的典型用法,因为对象没有 嵌入 到源对象的表中,而是存储在单独的收集表中。类似于a OneToMany,不同之处在于目标对象是Embeddable而不是Entity。这使简单对象的集合易于定义,而无需简单对象定义 逆映射Id或ManyToOne逆映射。ElementCollection还可以覆盖映射或表以获取其集合,因此您可以让多个实体引用同一Embeddable类,但是每个实体 都将其依赖对象存储在单独的表中。 使用a ElementCollection代替a 的局限性 OneToMany在于,不能独立于其父对象来查询,持久化和合并目标对象。它们是严格私有的(从属)对象,与Embedded映射相同 。cascade 在上ElementCollection,它们是不可选项,目标对象始终与其父对象保持,合并或删除。 ElementCollection仍然可以使用访存类型,并且默认LAZY与其他集合映射相同。
嵌入式收藏
的ElementCollection映射可以被用来定义的集合 Embeddable的对象。这不是Embeddable对象的典型用法,因为对象没有 嵌入 到源对象的表中,而是存储在单独的收集表中。类似于a OneToMany,不同之处在于目标对象是Embeddable而不是Entity。这使简单对象的集合易于定义,而无需简单对象定义 逆映射Id或ManyToOne逆映射。ElementCollection还可以覆盖映射或表以获取其集合,因此您可以让多个实体引用同一Embeddable类,但是每个实体 都将其依赖对象存储在单独的表中。
ElementCollection
Embeddable
OneToMany
Entity
Id
ManyToOne
使用a ElementCollection代替a 的局限性 OneToMany在于,不能独立于其父对象来查询,持久化和合并目标对象。它们是严格私有的(从属)对象,与Embedded映射相同 。cascade 在上ElementCollection,它们是不可选项,目标对象始终与其父对象保持,合并或删除。 ElementCollection仍然可以使用访存类型,并且默认LAZY与其他集合映射相同。
Embedded
cascade
LAZY