【发布时间】:2011-06-19 13:57:20
【问题描述】:
我有两个休眠类:一个基类和一个具有附加字段的扩展类。 (这些字段由其他表映射。)
例如,我有:
@Entity
@Table(name="Book")
public class A {
private String ID;
private String Name;
// ...
}
@Entity
@Table(name="Book")
public class B extends A {
public String node_ID;
// ...
}
public class Node {
public String ID; // maps to B.node_ID
// ...
}
如何在 Hibernate 中映射它? The hibernate documentation 声明了三种类型的继承配置:每个类一个表、一个带有类型列的表和一个连接表——这些都不适用。
我需要这样做的原因是因为 A 类来自可在多个项目中重复使用的通用框架,而 B 类(和 Node)是特定于一个项目的扩展——它们不会被再次使用。将来,我可能会有一个带有 house_ID 或其他字段的 C 类。
编辑:如果我尝试上述伪代码配置(两个实体映射到同一个表),我会收到 DTYPE 列不存在的错误。 HQL 附加了一个“where DTYPE="A"。
【问题讨论】:
-
如果将这些类映射到同一张表,没有discriminator列,Hibernate如何区分哪个是哪个?
-
@axtavt 这就是重点; B 的每个实例也是一个 A。