2015-05-05 53 views
7

因此,如果某些表缺少主鍵,那麼innodb就會導致問題。在@ElementCollection上指定一個主鍵

因此,在Hibernate中,我正在尋找一個用於指定@ElementCollection表上的主鍵並使用Set作爲下劃線數據結構的鍵。

我找到了一個有地圖主鍵的方法,但它有點奇怪,因爲我不需要地圖。

我還發現了一個與@Embeddable相關的答案,但我不需要那種複雜性。我在我的實體中使用Set或Set作爲數據結構。

任何想法如何實現?

+0

使用@ ManyTo *類似的關係:如果你有一個主鍵,那麼你有一個新的實體。 –

+1

僅僅爲一組int創建一個新的實體是很煩人的。 – plcstpierre

回答

8

如果您使用Set並使元素Column不爲null,則hibernate將使用連接列和元素列創建主鍵。

+1

好簡單的解決方案。爲我工作。 –

+2

非null必須使用@Column(nullable = false)進行設置,並且不能使用@NotNull註釋。 @Column(nullable = false)用於指示數據庫模式細節。請參閱[@NotNull vs @Column(nullable = false)](https://stackoverflow.com/a/7439544/1997088)以獲取更多詳細信息 – Black

2

@ElementCollection不能取主鍵,因爲Embeddable類型不能有標識符。你可以add an @OrderColumn來優化生成SQL語句。

如果您需要一個主鍵,那麼您應該將@ElementCollection關聯爲@OneToMany關聯。

+0

你有什麼參考? – plcstpierre

+0

我在答案中鏈接的文章是一個很好的起點。然後你必須手動生成模式來創建PK,因爲Hibernate只支持實體上的PK。 –

+0

糟糕。這不是性能問題,而是MySQL複製,所以我不認爲@OrderColumn會救我。我真正的問題是:你有沒有參考hibernate的限制? – plcstpierre