2012-05-16 290 views
0

我工作的JPA項目在我所延伸出的超類中的一些不同的實體標註爲Entity繼承映射註釋

@Entity 
@Table(name = "export_profiles") 
@NamedQueries({ 
    @NamedQuery(name = "ExportProfile.getAll", query = "select ep from PersistentExportProfile ep"), 
    @NamedQuery(name = "ExportProfile.getByName", query = "select ep from PersistentExportProfile ep where ep.profileName = :name") }) 
public abstract class PersistentExportProfile extends AbstractExportProfile { 

    // other mappings... 

} 

我想繼承我PersistentExportProfile定義爲每個映射子類。 這可能嗎?在我的超級課堂中我需要改變什麼?我需要在我的子實體中添加什麼?

注意所有的子類將映射到同一個表上。

+0

你不需要改變任何東西。只是讓你的子類實體。默認情況下,表映射設置爲整個層次結構的單個表格 – maress

+0

@JBNizet如果您沒有耐心回答我的「愚蠢」問題,您可以忽略它而不生氣......謝謝無論如何;) – davioooh

+0

I我沒有生氣,我從來沒有說過你的問題很愚蠢。但是這個問題顯然在文檔中得到了解答,而且這個文檔很容易找到。所以我重申我的問題,這是一個真正的問題:你爲什麼不讀它? –

回答

0

對我來說,最好的解決辦法是增加@Inheritance(strategy=InheritanceType.SINGLE_TABLE)@DiscriminatorColumn(name="export_type", discriminatorType=DiscriminatorType.STRING)我的抽象類,然後在我的具體課程中,我添加了@DiscriminatorValue來定義值DiscriminatorColumn

0

如果您的超類的唯一目的是爲子類定義通用映射,但本身並非持久性,則最好使用@MappedSuperclass註釋或<mapped-superclass>進行xml映射。有一個例子here

0

這種情況可能是Postgres的良好開端。

例如

CREATE TABLE "public"."abstract_export_profile" (
"label" TEXT 
) WITHOUT OIDS; 

CREATE TABLE "public"."persistent_export_profile" (
"id" BIGSERIAL, 
"value" TEXT, 
CONSTRAINT "mandant_pkey" PRIMARY KEY("id") 
) INHERITS ("public"."abstract_export_profile") 
WITHOUT OIDS; 

的名稱類:

@MappedSuperclass 
public class AbstractExportProfile { ... } 

而且

@Entity 
@Table(name= "mandant") 
public class PersistentExportProfile extends AbstractExportProfile { ... } 
+0

SQL不是我答案的一部分,我只是喜歡postgres繼承的方式。 –