我在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中映射这种摘要/细节关系?或者我应该放弃类继承,拥有两个独立的不相关的类,一个表示摘要数据,另一个表示完整数据(并重新定义摘要字段)。
谢谢。
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