Toplink JPA继承 - 摘要/详细信息关系

时间:2012-08-24 15:32:08

标签: java inheritance jpa orm toplink

我在webapp中使用toplink JPA,我想只将一个表映射到类层次结构。我希望有一个代表大部分数据的类,以及一个继承该类的类(因此它获取超类的所有字段,以及其他一些包含大量数据的字段)。我一直不想要大量的数据,不想把它们放在请求对象等中。当有人选择了其中一个摘要时,我只想要大量的数据。我按如下方式设置了类(简化为例)。

@Entity
@Table(name = "TRANSCRIPTS")
@MappedSuperclass //also tried without this - same error
public class Summary {

    @Id
    @Column(name = "id")
    private long id;
    @Column(name = "title")
    private String title;

    //rest of class etc.
}

@Entity
@Table(name = "TRANSCRIPTS")
public class Detail extends Summary {

    @Id
    @Column(name = "fullText")
    private String fullText;

    //rest of class etc.
}

当我尝试使用此层次结构获取数据时,我得到了

的错误
Unknown column 'DTYPE'

所以它正在寻找一个descriminator专栏。我没有设置,因为它不是那种关系。

我可以通过不同的方式在JPA中映射此摘要/详细信息关系吗?或者我应该放弃类继承并有两个单独的无关类,一个表示摘要数据,另一个表示完整数据(并重新定义摘要字段)。

感谢。

1 个答案:

答案 0 :(得分:1)

DTYPE它是Toplink试图访问以在您的实体之间进行选择的鉴别器列, 如果将该列添加到表模式中,它将开始工作。

DTYPE是数据库中的INTEGER类型列。

您可以使用以下代码段指定自己的鉴别器列:

@Entity
@DiscriminatorColumn(name="type",discriminatorType=DiscriminatorType.INTEGER)
@DiscriminatorValue("1")
class TestClass {}

以下是您的一些文档http://www.oracle.com/technetwork/middleware/ias/toplink-jpa-annotations-096251.html#CHDJHIAG