如何解决JPA:何时选择多值关联与元素集合映射
凭直觉,我通常将@ElementCollection用于合成方案。但这甚至感觉非常像CascadeType = DELETE
它们相似,但略有不同。Java Persistence Wikibook 的ElementCollection页面对其进行了很好的总结:
的
ElementCollection
映射可以被用来定义的集合Embeddable
的对象。这不是Embeddable
对象的典型用法,因为对象没有 嵌入 到源对象的表中,而是存储在单独的收集表中。类似于aOneToMany
,不同之处在于目标对象是Embeddable
而不是Entity
。这使简单对象的集合易于定义,而无需简单对象定义 逆映射Id
或ManyToOne
逆映射。ElementCollection
还可以覆盖映射或表以获取其集合,因此您可以让多个实体引用同一Embeddable
类,但是每个实体 都将其依赖对象存储在单独的表中。使用a
ElementCollection
代替a 的局限性OneToMany
在于,不能独立于其父对象来查询,持久化和合并目标对象。它们是严格私有的(从属)对象,与Embedded
映射相同 。cascade
在上ElementCollection
,它们是不可选项,目标对象始终与其父对象保持,合并或删除。ElementCollection
仍然可以使用访存类型,并且默认LAZY
与其他集合映射相同。
也可以看看
解决方法
我想更好地了解之间的区别
(1)传统的 多值关系/关联
@Entity -> @OneToMany -> @Entity
和
(2) 可嵌入(和基本)类型 的JPA2 集合
@Entity -> @ElementCollection -> @Embeddable
我看到了语法上的差异,但想知道是否还会 影响性能 。在后台,数据库实现看起来非常相似。
凭直觉,我通常会使用@ElementCollection
for 组成方案 。但是即使那样感觉也很相似CascadeType=DELETE
。
我在这里错过了本质吗?在某些方面,一个比另一个更有效吗?
谢谢你J
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。