Spring JPA:找不到具有`@ Any`注释的Object的属性id

时间:2016-10-18 07:21:18

标签: java spring hibernate spring-data-jpa

我希望创建一个可能与不同类型的实体相关的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的所有示例都完全相同。那么这样做的正确方法是什么?

2 个答案:

答案 0 :(得分:0)

错误显示for字段:     @JoinColumn(name =“container_id”)     私有对象容器;

您使用JoinColumn,但JPA无法在Object中找到ID字段。这意味着,当您使用JoinColumn时,JPA需要知道当前表中的列名,本例中为Attachment,以及联接表中引用的列,即container

但正如你所说,你想让这个表与不同类型的实体相关。我想你不能这样做。根据我的理解,JPA有点像“静态”解释。你不能让它“充满活力”。

答案 1 :(得分:0)

到目前为止,我已设法通过提供IAttachable接口getId()方法并在关系定义中将Object替换为IAttachable来克服此问题。

不确定这是否是最好的方法,但它到目前为止都有效。