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到每个子类中。是否可以?我必须在我的超类中更改什么,我必须在我的子实体中添加什么?

注意所有子类都将映射到同一张表上。

4

3 回答 3

0

如果您的超类的唯一目的是为子类定义公共映射,但本身不是持久的,那么您最好使用@MappedSuperclass注解或<mapped-superclass>for xml 映射。这里有一个例子。

于 2012-05-16T09:44:20.817 回答
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 { ... }
于 2012-05-16T09:52:01.100 回答
0

对我来说最好的解决方案是将@Inheritance(strategy=InheritanceType.SINGLE_TABLE)和添加@DiscriminatorColumn(name="export_type", discriminatorType=DiscriminatorType.STRING)到我的抽象类中,然后在我添加的具体类@DiscriminatorValue中定义DiscriminatorColumn.

于 2012-05-16T14:13:48.680 回答