我在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中映射此摘要/详细信息关系吗?或者我应该放弃类继承并有两个单独的无关类,一个表示摘要数据,另一个表示完整数据(并重新定义摘要字段)。
感谢。
答案 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