2011-06-03 57 views
14

我正在使用JPA 2.0和EclipseLink 2.2.0。多個@MappedSuperclass

我有一個@MappedSuperclass,AbstractEntity,這是我所有的實體提供PK和審計列的基礎。

我希望有另一個@MappedSuperclass繼承了該類,併成爲根的TABLE_PER_CLASS繼承策略。

目前,在使用Maven構建時,我會收到標題錯誤。

在繼承層次結構中是否允許多個@MappedSuperclass?

回答

3

在繼承層次允許多個@MappedSuperclass?

,我已經這樣做了。爲了能夠回答你關於Maven的錯誤問題,你必須提供一個堆棧跟蹤和代碼..

22

多個映射超被允許在同一個繼承層次。它不是直接說所以在規格,但JPA 2.0規範沒有明確禁止多個映射超類,而在其它上下文中,指的是區分具有多個映射在同一層次超類:

實體的默認接入類型層級由映射註釋在實體 類別和的映射超級的實體層級的映射超級上的 確定,其不明確指定訪問類型。

這意味着你可以做如下:

@MappedSuperclass 
public class FirstMapped { 
    String firstVal; 
} 

@MappedSuperclass 
public class SecondMapped extends FirstMapped { 
    String secondVal; 
} 

@Entity 
public class ExtendingEntity extends SecondMapped { 
    @Id int id; 
} 

映射超不能繼承實體的根。實體繼承的根必須是實體,如documentation中所述。使用EclipseLink將@Inheritance添加到上面示例中映射的超類之一中時,會被忽略。將@Inheritance添加到ExtendingEntity按預期工作 - 它成爲實體繼承層次結構的根。

一般映射超只允許映射的重用,他們不是實體繼承的一部分。

如果不回答你的問題,這將有助於如果你能分享這些「標題錯誤」。

+0

對於我在JPA 2.1和休眠5.2.12.Final(使用與彈簧引導2.0.0.M7)不起作用。 – 2018-01-30 14:28:05

相關問題