1

我在 web 应用程序中使用 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'

所以它正在寻找一个鉴别器列。我没有设置,因为它不是那种关系。

有没有其他方法可以在 JPA 中映射此摘要/详细信息关系?或者我应该放弃类继承并拥有两个独立的不相关类,一个代表汇总数据,一个代表完整数据(并重新定义汇总字段)。

谢谢。

4

1 回答 1

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

于 2012-08-24T15:39:28.970 回答