簡體   English   中英

Spring JPA:找不到帶有@Any批注的對象的屬性ID

[英]Spring JPA: no property id found for Object with `@Any` annotation

我希望創建一個可能與不同類型的實體相關的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的示例都完全相同。 那么正確的做法是什么?

錯誤顯示為for字段:@JoinColumn(name =“ container_id”)私有對象容器;

您使用JoinColumn ,但是JPA在Object找不到ID字段。 意思是,當您使用JoinColumn ,JPA需要知道當前表中的列名(在這種情況下為Attachment ,以及聯接表中的被引用列,即container

但是正如您所說,您希望讓該表與不同類型的實體相關。 我想你做不到。 以我的理解,JPA有點像“靜態”解釋。 您不能使其“動態”。

到目前為止,我已經設法通過提供帶有getId()方法的IAttachable接口並在我的關系定義IAttachable Object替換為IAttachable來克服了這一問題。

不知道這是否是最好的方法,但是到目前為止它仍然有效。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM