2012-11-09 45 views
4

我有一個MySQL數據庫,其中(大部分)表在列TENANT_ID上進行分區。每個表還有一個使用AUTO_INCREMENT的ID字段,因此在所有分區中都是唯一的。由於MySQL要求主鍵的分區列部分,數據庫主鍵是一個組合(ID,TENANT_ID)。Hibernate與分區MySQL表的映射

在我的Java代碼中,我只用@Id註釋映射了ID列。這主要是爲了避免Hibernate中關於複合鍵的許多問題。我現在面臨的問題是,大多數由Hibernate生成的SQL語句只使用ID列。例如,通過Hibernate生成一個UPDATE語句將改爲

UPDATE object SET value = ? WHERE ID = ? 

然而,由於此查詢不包括在TENANT_ID任何謂詞,它並不需要分區的充分利用,將需要掃描的每個分區,直到找到ID。我想對於生成的查詢到產量:

UPDATE object SET value = ? WHERE ID = ? AND TENANT_ID = ? 

我的問題是,是否有一個簡單的方法來做到這一點,而不必訴諸於JPA複合鍵,因爲我知道很多人阻止他們使用。

+0

你真的需要這兩列('TENANT_ID'和'ID')嗎?難道你不可能完全放棄'ID'列,並將'TENANT_ID'定義爲主鍵? – RandomSeed

+0

選項2:通過'ID'而不是'TENANT_ID'分區怎麼辦? – RandomSeed

回答

0

您可以使用嵌入式實體,例如包含id和EntityId的ObjectPK。比使用@EmbeddedId從Object實體引用它。