我想按如下方式定义一个对象模型:
A包含一个X列表,每个X包含一个Y,每个Y指向一个B.我将其设置为A和B为Entity
,而X和Y都是{{1 }}。 A包含一个类型为List of X的Embeddable
。这些类的代码如下所示。
当要求Hibernate(3.6.10)使用@ElementCollection
为此模型生成SQL时,我期望有三个表:A,B和一个从A到B的引用的集合表,包含A .id,B.id和用于保持列表顺序的订单列。相反,Hibernate给了我以下内容:
SchemaExport
请注意,集合表没有B.id的列,也没有应该存在的外键约束。在我看来,我应该支持我想要的模型。它是否有充分的理由(如果是这样,那是什么原因?),或者这是Hibernate或JPA中的错误/缺失功能?
作为一项实验,我折叠了我的create table CollectionOfB (A_ID bigint not null, embeddableAList_ORDER integer not null, primary key (A_ID, embeddableAList_ORDER))
create table EntityA (id bigint not null, primary key (id))
create table EntityB (id bigint not null, primary key (id))
alter table CollectionOfB add constraint FKFEABC9AD9AECF0BB foreign key (A_ID) references EntityA
关系,因此它只有一个级别(完全删除Y,将引用放在X的内部)。通过这种更改,架构会按照我的预期生成,因此Embeddable
ElementCollection
的{{1}}工作的基本思路是:
Embeddable
此外,如果我制作了不同的ManyToOne
C,并将其定义为create table CollectionOfB (A_ID bigint not null, B_ID bigint, embeddableAList_ORDER integer not null, primary key (A_ID, embeddableAList_ORDER))
create table EntityA (id bigint not null, primary key (id))
create table EntityB (id bigint not null, primary key (id))
alter table CollectionOfB add constraint FKFEABC9AD9AED651B foreign key (B_ID) references EntityB
alter table CollectionOfB add constraint FKFEABC9AD9AECF0BB foreign key (A_ID) references EntityA
X( 不 一个{{1} X)它正确地引用了B.所以有两个Entity
级别的想法,其中较低级别的Embeddable
也 工作。
ElementCollection