我希望创建一个可能与不同类型的实体相关的Attachment
实体,因此我尝试使用@Any
注释。我的代码是这样的:
@Entity
public class Attachment{
@XmlElement
@Any(metaColumn = @Column(name = "containerType"), fetch = FetchType.LAZY)
@AnyMetaDef(idType = "long", metaType = "string",
metaValues = {
@MetaValue(targetEntity = TestApp.class, value = "TestApp")
})
@JoinColumn(name = "container_id")
private Object container;
@XmlElement
@Column(insertable = false, updatable = false) //this I added cause Hibernate said so
private String containerType;
}
我现在的问题是,当我启动我的应用程序时,数据库初始化失败并出现:
org.springframework.data.mapping.PropertyReferenceException: No property id found for type Object! Traversed path: Attachment.container
到目前为止,我找到的使用@Any
的所有示例都完全相同。那么这样做的正确方法是什么?
答案 0 :(得分:0)
错误显示for字段: @JoinColumn(name =“container_id”) 私有对象容器;
您使用JoinColumn
,但JPA无法在Object
中找到ID字段。这意味着,当您使用JoinColumn
时,JPA需要知道当前表中的列名,本例中为Attachment
,以及联接表中引用的列,即container
。
但正如你所说,你想让这个表与不同类型的实体相关。我想你不能这样做。根据我的理解,JPA有点像“静态”解释。你不能让它“充满活力”。
答案 1 :(得分:0)
到目前为止,我已设法通过提供IAttachable
接口getId()
方法并在关系定义中将Object
替换为IAttachable
来克服此问题。
不确定这是否是最好的方法,但它到目前为止都有效。