Hibernate @可嵌入@ManyToOne
想象一下下面的课程Hibernate @可嵌入@ManyToOne,hibernate,jpa,embeddable,Hibernate,Jpa,Embeddable,想象一下下面的课程 @Embeddable class A { @ManyToOne public B classB; ... public State someEnum; } @Entity @Table(name = "TEST") class B { public long id; //... some data @Embedded @AttributeOverrides({ @AttributeOverr
@Embeddable
class A {
@ManyToOne
public B classB;
...
public State someEnum;
}
@Entity
@Table(name = "TEST")
class B {
public long id;
//... some data
@Embedded
@AttributeOverrides({
@AttributeOverride(
name = "classB.id",
column = @Column(name = "EMBEDDED1_ID")
),
@AttributeOverride(
name = "someEnum",
column = @Column(name = "EMBEDDED1_SOMEENUM")
)
})
public A embedded1;
@Embedded
@AttributeOverrides({
@AttributeOverride(
name = "classB.id",
column = @Column(name = "EMBEDDED2_ID")
),
@AttributeOverride(
name = "someEnum",
column = @Column(name = "EMBEDDED2_SOMEENUM")
)
})
public A embedded2;
}
所以我希望数据库表看起来像
- 试验
- 身份证
- 嵌入的1_ID
- 嵌入的1_SOMEENUM
- 嵌入的2_ID
- 嵌入的2_SOMEENUM
JPA:hibernate-JPA-2.1-api不能使用@AttributeOverride重命名外键列。您必须使用@AssociationOverride
@Entity
@Table(name = "TEST")
public class B {
public long id;
@AssociationOverride(name = "classB", joinColumns = @JoinColumn(name = "EMBEDDED1_ID"))
@AttributeOverrides({
@AttributeOverride(
name = "someEnum",
column = @Column(name = "EMBEDDED1_SOMEENUM")
)
})
@Embedded
public A embedded1;
@AssociationOverride(name = "classB", joinColumns = @JoinColumn(name = "EMBEDDED2_ID"))
@AttributeOverrides({
@AttributeOverride(
name = "someEnum",
column = @Column(name = "EMBEDDED2_SOMEENUM")
)
})
@Embedded
public A embedded2;
您嵌入了两次对类B有引用的类A。现在,A中的多个元素会导致B的两个外键具有相同的名称classB_id。但是没有办法解决这个问题。你的构造有点奇怪。我知道一个旧的版本,这个碰巧起作用。我不知道为什么,但在我更新后,它现在变为不工作了。我使用了@AttributeOverride并希望它会消失,但hibernate似乎没有在内部重命名它,仍然使用导致错误的classB_id。我说的对吗?是的,这很奇怪。但我没有实施它。。。。我被迫在这个项目上工作;-)