2015-01-02 129 views
0

基本上,是可能的內部類作爲休眠組件

文檔說

A組分是持久化爲值類型,而不是一個實體引用包含的對象。

與值類型相似,組件不支持共享引用。換句話說,兩個人可以具有相同的名稱,但是兩個人物對象將包含兩個獨立的名稱對象,這些名稱對象的值僅爲「相同」。

值類型的主要特徵是它們沒有定義自己的生命週期。我們說他們是由其他人(特別是一個實體,我們將在後面看到)「擁有」,它定義了它們的生命週期。

非靜態的內部類可以很好地適應這一點,但我從來沒有見過在實踐中的例子。使用內部類作爲組件有什麼限制嗎?

回答

1

經過一番研究,我發現,答案是沒有,這是不可能的

其原因很簡單,(在我的理解)只與Hibernate工具本身,不與任何架構問題連接。 Hibernate需要組件類具有默認的無參數構造函數,並且無法實例化內部類(雖然它接受映射成功)。我希望這個特性在未來的Hibernate版本中得到支持。

2

JPA規範說:

嵌入類必須堅持在與嵌入類不標註爲實體的例外重刑實體2.1節規定的要求。

和2.1節說:

實體類必須是頂級類。

+0

它似乎是hibernate忽略JPA關於嵌入式的推薦 –

0

您必須將內部組件類標記爲static

+0

我試過用靜態內部類(組件/嵌入式)並且不工作 – joseaio