2009-06-07 32 views
14

下不起作用:Hibernate:在類中使用mappedBy來擴展註釋爲JoinedSubclass的另一個類?

@Entity 
class Owner { 

    @OneToMany(mappedBy="owner", cascade = {CascadeType.ALL}) 
    protected Set<B> getBSet() { 
    .. 
    } 

} 

@Entity 
@Inheritance(strategy=InheritanceType.JOINED) 
class A { 
    @ManyToOne 
    public Owner getOwner() { 
    ... 
    } 
} 

@Entity 
class B extends A { 

} 

導致異常這樣: org.hibernate.AnnotationException:引用的mappedBy的未知目標實體屬性:B.user所有者。

我試圖避免將「所有者」屬性複製到類B(這將因此「非規範化」並將所有者密鑰複製到爲實體A和B生成的兩個表中)。此外,我真的很想有一個單獨的表中的A和B,而不必使用SingleTable繼承來使用鑑別器。

另外,我無法弄清楚如何在A和B之間使用@OneToOne(而不是B擴展A)來做類似的事情。

回答

0

我會仔細檢查你的實際執行情況。我用你的示例代碼,並添加@Id後,一切按預期工作。即使IntelliJ說getBSet()與B.owner關聯。

+0

你真的運行過它並創建Session Factory嗎?謝謝 - 我會仔細檢查。我沒有使用這個完全相同的代碼 - 我只是從一個真實的例子中拉出來,我做了相同類型的事情...... – GreenieMeanie 2009-06-08 14:04:23

+0

是的,我確實運行過它。這就是我提到@ID的原因。 SF抱怨@id不見了。之後SF順利建成。我可以發誓我輸入了這個確切的句子,哈!祝你好運! – danieljimenez 2009-06-08 14:27:09

6

嘗試添加targetEntity = Transaction.class。當我使用SINGLE_TABLE繼承時,這對我有用。我沒有嘗試與JOIN。

@Entity 
class Owner { 

    @OneToMany(mappedBy="owner", cascade = {CascadeType.ALL}, targetEntity = Transaction.class) 
    @Where(clause = "tableType='I'") 
    protected Set<B> getBSet() { 
    .. 
    } 

} 
10

這是一個休眠怪胎,但它是故意的。我有一個blog post瞭解背景信息,鏈接和JOINED解決方案的解決方法。

相關問題