我有两个 hibernate 类:一个基类和一个具有附加字段的扩展类。(这些字段由其他表Map。)
例如,我有:
@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中Map这一点?Hibernate文档说明了三种类型的继承配置:每个类一个表,一个带有类型列表,以及一个连接表--这些都不适用于这里。
我需要这样做的原因是因为类A来自通用框架,可以在多个项目中重用,而类B(和Node)是特定于一个项目的扩展--它们不会再被使用。将来,我可能会有一个带有house_ID或其他字段的类C。
**编辑:**如果我尝试上述伪代码配置(两个实体Map到同一个表),我会得到DTYPE列不存在的错误。HQL有一个“where DTYPE=“A”附加。
2条答案
按热度按时间cqoc49vn1#
这可以通过将
@DiscriminatorColumn
和@DiscriminatorValue
Map到两个类的相同值来实现;这可以来自您使用的任何列,无论是哪种类型都具有相同的数据(不确定它是否适用于空值)。这些类应如下所示:
ivqmmu1c2#
对于像我这样的人,如果不想使用dtype列,而是想对多个实体使用同一个表,我建议使用this
基本上,您可以创建这样的Base
从上面我们已经创建了没有任何实体或表Map的基本超类。然后我们创建BookA作为实体+表Map的默认值。从那里我们可以创建其他实体,所有这些实体都从BaseBook扩展,但指向一个表