2012-03-27 25 views
1

我有一個類A和一個繼承自A的類B.類A具有某個屬性X.類B添加了另一個屬性Y.B的一個實例是唯一的由它的一對屬性{X,Y}來標識。因此,{X,Y}是類B的候選鍵。顯然,由於屬性Y不存在,因此該鍵不存在於A類級別。我使用代理鍵A級。跨不同類/表的唯一約束(TABLE PER SUBCLASS)

現在,我使用Hibernate進行對象關係映射。如果我使用TABLE PER SUBCLASS繼承策略,我不認爲有可能爲屬於不同類的多個屬性(然後在數據庫中,對不同的表)定義UNIQUE約束。

我的問題是我怎樣才能使用Hibernate和更一般的SQL定義這個候選鍵的唯一約束?如果不可能,你推薦什麼?

感謝

回答

1

這裏有兩種解決方案:

  • 有一列是它的PK創建新表。這張表應該包含所有你想做的獨特的值。爲該表創建外鍵,以確保列上的域來自唯一表。
  • 創建觸發器,如果​​違反條件會引發錯誤。
+0

我的主鍵在A中定義,這是代理鍵(Long integee)。 UNIQUE約束必須應用於不是主鍵的屬性對{X,Y}。你能爲第一個解決方案提供一個例子嗎? – 2012-03-28 06:00:47

+0

您可以在多個列上擁有聚簇索引和FK。它就像一列一樣工作。值的組合是強制的唯一。 – usr 2012-03-28 10:33:02