我想更好地了解之间的区别
(1)传统的 多值关系/关联
@Entity -> @OneToMany -> @Entity
和
(2) 可嵌入(和基本)类型 的JPA2 集合
@Entity -> @ElementCollection -> @Embeddable
我看到了语法上的差异,但想知道是否还会 影响性能 。在后台,数据库实现看起来非常相似。
凭直觉,我通常会使用@ElementCollection
for 组成方案 。但是即使那样感觉也很相似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
与其他集合映射相同。
我有两个这样的 JPA 实体: 如您所见, 字段在 和 之间形成了多对多关系,因此我认为使用 来指定字段的级联是合适的。但是,当尝试在映射中保留具有几个 值的 时,我得到以下异常: 显然,EclipseLink 不会级联我的 实例的持久性。我应该如何注释 以使级联持久工作?
问题内容: 我在持久层中存在多对多关联的问题。我的情况如下: 一个用户可以具有多个角色,并且一个角色可以具有与其连接的多个用户。在测试期间,我遇到了一个奇怪的行为。我创建了角色对象和几个用户对象。该角色已设置给每个用户。此后,使用DAO保存了用户。然后,加载一个用户,以检查他是否在保存用户对象之前获得了传递给他的角色。呼叫用户表明角色设置正确。 要检查反方向是否也起作用,可以使用角色DAO从数据库
主要内容:集合类型,以下是纠正/补充内容:集合(Collection)是一个将多个对象分组为一个单元的java框架。它用于存储,检索和操作汇总数据。 在JPA中,可以使用集合来持久化包装类和String的对象。JPA允许三种对象存储在映射集合中 - 基本类型,实体和嵌入式类型。 集合类型 根据要求,我们可以使用不同类型的集合来持久化对象。如下所示 - List Set Map 包中包含集合框架的所有类和接口。 以下是纠正/补充内容: 根据
我首先尝试了用户图,但是由于我们要获取组,所以我尝试了组图。同样的例外。 问题是,没有简单的方法向生成的查询添加,因为我不知道应该加入关联的哪些属性。我必须加载Entitygraph,遍历它和任何子图,并生成正确的join子句。 关于查询生成的更多细节: queryException:查询指定了连接提取,但是提取的关联的所有者不在选择列表中
主要内容:集合映射实例,程序输出结果集合(Set)是一个包含唯一元素的接口。 这些元素不保留任何顺序。当需要以无序方式检索唯一元素时,可以使用。 完整的项目目录结构如下所示 - 集合映射实例 在这个例子中,我们将一个对象嵌入到一个实体类中,并将其定义为一个集合类型 - 。 这个例子包含以下步骤 - 第1步: 在包下创建一个实体类,这个类包含员工, 和嵌入对象(员工地址)。注解 表示嵌入对象。 文件:Employee.java 的代码
问题内容: 如何从集合中选择随机元素?我对从Java中的HashSet或LinkedHashSet中选择随机元素特别感兴趣。也欢迎使用其他语言的解决方案。 问题答案: