2009-12-04 85 views
1

是否有可能在Java DB中執行表繼承?我們有一個使用繼承的複雜代碼模型,並且也會受益於DB繼承。Java數據庫表繼承?

可能嗎?它似乎不可能從一個快速的谷歌或在netbeans周圍戳。

乾杯

回答

0

首先,你的問題在細節上相當模糊。社區可以爲你提供的支持越多,你越明確。所以我會猜測你在尋找什麼支持,並希望它有幫助。

如果您使用的是JPA/Hibernate之類的東西,您可以使用註釋@MappedSuperClass創建類。當這些類被掃描時,將實現「父」表和子表之間的關係。作爲一個簡單的例子:

@MappedSuperClass 
public class Foo { 
    private Long id; 
    // ... getters and setters 
} 

@Table("BAR") 
@AttributeOverride(name="id" [email protected](name = "BAR_ID")) 
public class Bar extends Foo { 
    // ... map your table 
} 

如果你會發現,在Foo類沒有代表的表。它可以提供跨越多個表的一些常用字段(典型字段,如modified_by,modified_date等)。如果Bar具有類似BAR_ID的ID,則可以使用@AttributeOverride批註覆蓋父項。

雖然我用註解做了所有事情,但我相信你也可以考慮用XML來做這件事。

+0

對不起,我不清楚。雖然我認爲它的Apache Derby和我目前正在遵循本教程,但我並不完全確定即將使用的解決方案:http://netbeans.org/kb/docs/java/gui-db-custom.html。我想知道如果用這種方式可以做繼承嗎? – Mig 2009-12-04 14:50:36

0

我不知道如果我理解正確的問題.... :-(


使用像Hibernate(或JPA)的ORM解決方案,可以有一個抽象有幾個子類(或沒有)的實體,每個映射到不同的表

優點:

  • 要求o每一列只需定義一次,然後將其重複用於所有表格。
  • 如果所有這些實體依賴公共部分,您可以擁有一些通用的代碼。 Hibernate也可以讓你編寫通用的查詢
    (例如:「select * from Object」返回整個數據庫,因爲它匹配你所有的實體)。
1

我假設「Java DB Table」是指通過JDBC訪問的標準SQL表,而不是稱爲「Java DB Table」的產品。 你的問題的答案是,不,你不能直接在SQL中進行繼承。這不是Java,JDBC或任何對象關係映射工具的限制,而是SQL本身的一個問題。 但是,使用Hibernate/JPA/JDO,使用幾種不同的方法假冒它很容易。
因此,對於這個問題的回答「我可以在使用Java的關係數據庫中輕鬆表示我真正很酷的對象繼承層次結構嗎?」是,適合簡單的定義,是的。