我有一个相当典型的场景,其中有一个main@实体,他内部的所有内容都是可嵌入的(因此,没有父实体,内部的所有内容都没有意义)。现在JPA 2.0阻止我在另一个@ElementCollection中定义的@Embeddeble中嵌套一个@ElementCollection:
JSR-317 2.6可嵌入类和基本类型的集合包含在元素集合中的可嵌入类(包括另一个可嵌入类中的可嵌入类)不得包含元素集合,也不得包含与多对一或一对一关系以外的实体的关系
现在的问题是:为什么会这样?一个简单的例子:
@Entity
public class Tournament {
@Id
Long id;
@ElementCollection
@CollectionTable
private List<Edition>;
}
@Embeddable
public class Edition {
@ElementCollection
@CollectionTable
private List<Round>
}
@Embeddable
public class Round {
blabla;
}
有这个问题吗?这只是一个示例,您可以将Round和Edition定义为实体并解决问题,但在我的例子中,由于许多原因,我需要强制执行一些非常嵌套的东西,如果没有其父对象,就没有意义。
为什么JPA 2.0必须阻止我这样做?
您的情况违反了粘贴的规范元素:
Edition本身是@可嵌入的,并且包含Round的元素集合,因此:
包含在元素集合(Tournament.editions)中的可嵌入类(Edition)不得包含元素集合(Edition.rounds)。
至于为什么你不能这样做-如果你看看http://en.wikibooks.org/wiki/Java_Persistence/ElementCollection然后您将看到,子级(版本)将仅使用FK映射回所有者(Tournament.id),而没有自己的id列-理由是作为弱实体,它没有自己的id,并且仅通过引用锦标赛的id来定义。
综上所述,如果这也是一个弱实体,那么它应该通过引用版本的FK来定义-但我们已经说过,它没有自己的ID,因此如果不向版本添加ID,就不能在DB中映射它-在这一点上,它本身就是一个实体,而不是简单的@可嵌入的。
查看下面的评论中的Wikipedia示例-http://en.wikipedia.org/wiki/Weak_entity-弱实体的例子有OrderNumber、CustomerNumber等-只有嵌入到另一个对象中才有意义的东西。
您仍然可以拥有具有父映射(即版本上的锦标赛引用)和/或双向引用的实体。您可以强制在版本上使用@manytone注释上的null=false属性定义父对象,从而强制执行模型的要求。
在搜索了JPA文档和各种帖子后,我很困惑以下内容是否适用于JPA2。我刚开始学JPA所以如果我做了什么蠢事, 我的领域模型有一个“投资组合”,其中包含零个或多个“未平仓”。头寸由“工具”(JPA实体)和价格(双倍)组成。投资组合如下: OpenPosition嵌入式系统如下所示: 而该工具实体为: 当我试图使用这个时,模式被创建,我能够持久化投资组合,但是当我试图检索它们时,我在仪器类的hashC
我遇到了一个问题,在我的JPA表中没有任何内容被持久化。据我所知,我想我理解了的基本思想。我猜出现问题的原因是,我在一个可嵌入的对象中有一个。 一个简单的例子: 有什么线索表明可能出了什么问题吗? 为了简洁起见,我将尽量使附加信息尽可能简短。 创建计算原因 创建计算历史记录 调试信息在计算历史#创建 HibernateDAO仓库 Hibernate生成的SQL 看起来HiberNate甚至没有生成
我正在运行Hibernate 4.2.6。Final/JPA2,并尝试创建一个由@embedded对象组成的@ElementCollection列表,这些对象本身包含一个字符串的@ElementCollection列表。 但是,当尝试实例化EntityManager时,hibernate会抛出一个ContoptModificationException,我一点也不明白。 如果我注释掉我的
问题内容: 我正在运行Hibernate 4.2.6.Final / JPA2,并尝试具有@Embeddable对象的@ElementCollection列表,这些对象本身包含String的@ElementCollection列表。 但是,hibernate在尝试实例化EntityManager时抛出ConcurrentModificationException,我根本不了解。 如果我注释掉in
我想向实体类添加嵌入关系。 在我的数据库中,我有表蛋白质: 和表基准: 在基准测试中,字段目标是蛋白质表的外键 我已经从蛋白质表中找到了一个名为SupProtein的实体,它运行良好。 现在,我想向基准类添加一个嵌入关系。 这是我的基准课程: 在我的实体课程中,我添加了: 但当我尝试构建时,会出现以下错误: 我没有创建任何ORM. xml文件,在任何地方都找不到。我需要一个orm.xml文件来创建
问题内容: 我想知道是否有可能在另一个Embeddable中包含Embeddable的ElementCollection? 这是我的供应商实体的示例,该实体具有可嵌入类型的地址列表: 这是我的可嵌入地址,其中包含可嵌入电话的列表 这是嵌入式电话的定义 我目前正在使用JPA 2 + Hibernate 3.6.x对此进行测试 在地址中使用嵌入式电话在我的测试中导致错误。这是最底层的部分调试消息: 删