2010-03-21 79 views
4

我有一個名爲AbstractEntity的類,它用@MappedSuperclass註解。然後我有一個名爲User(@Entity)的類,它擴展了AbstractEntity。這兩個都存在於名爲foo.bar.framework的包中。當我使用這兩個類時,一切正常。但現在我已經將包含這些文件的jar導入到另一個項目中。我想重複使用User類並用一些附加字段進行擴展。我認爲@Entity public class User extends foo.bar.framework.User可以做到這一點,但我發現這個用戶的實現只繼承了AbstractEntity的字段,但沒有任何來自foo.bar.framework.User。問題是,我如何讓第二個User類繼承第一個User實體類的所有字段?擴展實體

這兩個User類實現都具有使用@Table(name =「name」)定義的不同表名。

我的班這個樣子

 

package foo.bar.framework; 

@MappedSuperclass 
abstract public class AbstractEntity { 

    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    protected Long id; 

    @Column(nullable = false) 
    @Version 
    protected Long consistencyVersion; 

    ... 
} 
 
 

package foo.bar.framework; 

@Entity 
@Table(name = "foouser") 
public class User extends AbstractEntity { 

    protected String username; 

    protected String password; 

    .... 
} 
 
 

package some.application; 

@Entity 
@Table(name = "myappuser") 
public class User extends foo.bar.framework.User { 

    protected String firstname; 

    protected String lastname; 

    protected String email; 

    .... 
} 
 

通過上面的代碼,的EclipseLink將創建一個名爲 「myappuser」 包含字段 「ID」, 「consistencyVersion」 表, 「名字」 ,「姓氏」和「電子郵件」。 「用戶名」和「密碼」字段不會創建到表格 - 這就是我遇到的問題。

+1

你怎麼確認它從abstractuser只繼承領域? – Bozho 2010-03-21 19:58:55

+1

請展示更多代碼並解釋您期望的內容以及您獲得的內容(在Java級別和數據庫級別)。 – 2010-03-21 20:21:51

+0

@Bazho,我將我的代碼與實際的數據庫表進行了比較。 @Pascal Thivent,我已經包含了你所要求的信息。 – 2010-03-22 05:21:45

回答

4

對於JPA,缺省繼承策略(即未指定時)爲SINGLE_TABLE:每個繼承層次結構只有一個表,並且所有字段都保留在基類的表中。

如果要爲繼承層次中的每個類都有一個表,並且每個表都包含所有繼承字段的列,則需要使用TABLE_PER_CLASS策略。

package foo.bar.framework; 

@MappedSuperclass 
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS) 
abstract public class AbstractEntity { 

    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    protected Long id; 

    @Column(nullable = false) 
    @Version 
    protected Long consistencyVersion; 

    ... 
} 
+1

這是正確的,但是這並沒有完全解決我的問題。似乎我不能有兩個同名的實體(即使它們在不同的包中)。這意味着框架的用戶表沒有被創建,實際上,EclipseLink似乎完全忽略了它。要解決我的問題,我必須重命名其他用戶實體類,並執行您所建議的更改。 – 2010-03-25 05:31:34