我在一个已经长大的项目中工作,所以我无法更改任何使用的框架或库的任何版本。
实际上,我有一个特殊的情况,我设法用两个实体和 和来@Inheritance
解决。现在,我有一个实体,其中引用了继承中的两个类,如下所示:@DiscriminatorColumn
@DiscriminatorValue
@Entity
//Other annotations
public class A implements IA {
//Class body
}
@Entity
//Other annotations
public class B extends A implements IB { //Note: `IB` extends `IA`.
//Class body
}
@Entity
//Other annotations
public class Container {
private IA object1;
private IA object2;
}
这里的问题是我正在尝试使用 @Any 注释,因为object1
and/orobject2
可以是A
or类型B
。我所做的是这样的:
@Any(metaColumn=@Column(name="objectOneType", length=3),fetch=FetchType.EAGER)
@AnyMetaDef(idType="long",metaType="string", metaValues={
@MetaValue(targetEntity=A.class, value="A"),
@MetaValue(targetEntity=B.class, value="B")
}
)
@JoinColumn(name = "relatedObjectId")
private IA object1;
如此处所述,Hibernate 的@Any
注释系列在 JPA 2 中没有对应物,并且由于我无法切换到 Hibernate 4.1,因此我被困在这里试图找出一种使其工作的方法或我应该如何修复它。
一种“不那么优雅”的方法是创建一个新实体并将字段从 A 复制到 B,擦除继承并修复特定情况。
也许,我在 JPA 中失去了一些我还不知道的特殊功能,所以我目前愿意接受并感谢任何可能为我指明正确方向的建议。