簡體   English   中英

生成在多個表中唯一的主鍵

[英]Generating primary key that is unique across multiple tables

我正在使用Hibernate開發餐廳應用程序。 我有幾個實體,例如比薩餅,飲料,面食等。

我希望將它們保留到不同的表中,但要具有唯一的主鍵。 即,如果我說itemId 4,則足以識別任何可用的食物。

你們知道怎么做嗎?

我希望使用Hibernate注釋的解決方案。 : - |

您可以使用db序列,然后您的任何實體都可以使用此序列來生成其ID。

一個UUID對於所有表都是唯一的,但是您將無法確定哪個表僅基於id。

老實說,這有點奇怪。 但是,如果您真的堅持這樣做,則可以簡單地在表/實體名稱前添加主鍵。 為此,您需要一個自定義生成器。 看到這個問題

您可以使用繼承。 有一個基本實體@MappedSuperclass Item ,其@Inheritance策略設置為table-per-class,然后設置PastaPizza 如果字段之間的差異不大,則您甚至可以使用帶有區分符列的單表策略。 而且,如果您的實體類型可能會增長,則只需將一個Item與一列type

我認為您對分析的了解不正確。 如果您看看如何使用您提到的實體,我認為還會有一個像訂單這樣的實體將包含其中的幾個實體,而且所有這些實體的確相似,它們都可以被視為“菜單項”的子類。它們都有一些共同的屬性,例如價格,並且可以以相同的方式使用,例如包含在訂單中。

您可以查看Hibernate核心文檔中的 5.1.6節,以了解如何實現將OO模型映射到一個或多個表的各種策略。 請注意,“每類表策略”和10.1.5。 每個具體類的表將為您提供當前的表設置,但是您需要能夠生成MySQL無法輕松實現的鍵。 但是,我認為您會發現應該在基類上包含一些公共屬性,因此需要另一種形式的映射,並且最終得到一個菜單項表,並且可以很容易地生成一個id。

我同意Mark的觀點,似乎每個子類的表都適合您的設計,並且需要在多個項目之間具有一個ID。 另請注意,當您需要多個項目中沒有公用父表的多個表中的項目時,可能會導致一些麻煩。

暫無
暫無

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

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