2012-02-01 30 views
3

在我的實習中使用JPA 2.0合規性工具包。該套件的一部分將覆蓋角落案件。結合@MappedSuperclass和@SecondaryTable - 是否允許?

@MappedSuperclass沒有原始表格,因爲它不是實體。 JSR-317美國這個有趣的一點:

與MappedSuperclass註解指定一個類可以以同樣的方式映射,只是因爲沒有表存在映射超映射只適用於它的子類實體本身。

「由於映射超類本身不存在表」。

這是否意味着「無默認值」 - 如果您想要,您可以創建自己的表,但它不能自行檢索?

或者這是否意味着「映射超類中不存在表」 - 您不允許創建一個(使用@SecondaryTable)?

根據JPA 2.0,是否允許將@MappedSuperclass的一部分映射到@SecondaryTable

+0

我一直在接受少量的這類問題的答案,我想說一個較低質量的答案也是一個很好的答案。這些都是我正在談論的角落案例 - 如果我沒有得到答案,我總是可以在文檔中將其標記爲「不清楚」,並附帶指向此問題的鏈接以及JPA 2.0實施者應採取的建議路徑。 – Pimgd 2012-02-01 11:39:58

回答

1

我不確定是否在映射超類中擁有@ SecondaryTable註解或者映射超類中定義的屬性持久存在於派生映射的實體中的@SecondaryTable表中,所以我試圖回答兩者。

映射超類沒有它自己的表。上下文映射超類用於定義表。這是有道理的,因爲否則從一個映射超類繼承映射到多個實體總是會產生需要覆蓋除了一個派生實體之外的所有其他表的名稱。我認爲「映射超類沒有表」關閉也使用@SecondaryTable出。

此外,JPA 2.0規範第12.3章給出的XML Schema不允許映射超類的二級表。

但是,使用實體中的@AttributeOverride的列元素將派生自映射超類的屬性保存到實體的輔助表中應該沒問題。規範中並沒有涉及這種情況。

所以我認爲「映射超類沒有表可以存在」是真實的,但沒有讓你將這些屬性放置到實體的輔助表。有關列的表的決定發生在派生屬性和關聯映射的實體中,而不是映射的超類本身。