2013-01-21 131 views
1

我有兩個實體Item休眠@OneToOne給出錯誤

它們與實體Link

每個項目可以有很多的鏈接鏈接,但鏈接是兩個項目之間的連接。

問題是項目的順序很重要。其中一個始終是第一個item,另一個則是第二個item

所以我的實體是這樣的:

Item 
    private Collection<Link> links = new ArrayList<Link>(); 
    @OneToOne(cascade = CascadeType.ALL, mappedBy = ????) 
    public Collection<Link> getLinks() { 
     return links; 
    } 

Link 
private Item firstItem; 
private Item secondItem; 

@OneToOne(mappedBy = ???) 
public Item getFirstItem() { 
    return firstItem; 
} 

@OneToOne(mappedBy = ???) 
public Item getSecondItem() { 
    return secondItem; 
} 

我本來應該投入到mappedBy ??由於pseudomapping爲Item應該我smthin這樣的: mappedBy = { "firstItem", "secondItem") }

起初,我並沒有映射,這給錯誤:

@OneToOne or @ManyToOne on foo.bar.Item.links references an unknown entity: java.util.Collection 
+4

也許我沒有收到什麼東西,但是如何用@OneToOne映射一個集合? –

+0

爲了擴大@DenisTulskiy所說的話:你*不能*用@ OneToOne映射一個集合。另外,你需要使用'@ OneToMany'。您可能需要有兩個集合,一個用於'Link',其中'Item'是第一個,另一個用於第二個集合。 –

回答

3

你必須與mappedBy指向分別firstItemsecondItem,創建兩個不同的集合。

如果您需要查看它們作爲單個集合,請在代碼中執行。

同樣如前所述,您需要使用@OneToMany/@ManyToOne而不是@OneToOne@ManyToOne不需要mappedBy

+0

兩個集合似乎合乎邏輯。 – Jaanus