我有以下情况:
有一个表维护与多个实体相关的元数据。下面是架构以及表格的外观:
TABLE_A
和TABLE_B
都被映射为Hibernate实体,并由ClassA
和ClassB
支持。
现在,我如何在Hibernate中映射此表,以便我可以实现以下场景:
ClassA classA = aService.getById("1234");
ClassB classB = bService.getById("1234");
classA.getAttributeValue(); -- Should return 12ab
classB.getAttributeValue(); -- Should return cs12
有没有一种方法可以让Hibernate根据调用该方法的对象类型智能地获取AttributeValue
?
答案 0 :(得分:1)
我认为你正在寻找Single table inheritance。所以你的课程看起来像这样:
@Entity
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(
name="entityType",
discriminatorType=DiscriminatorType.STRING
)
@DiscriminatorValue("TABLE_A")
public class ClassA {
@Id
private String id;
@Column(name = "ATTRIBUTE_NAME")
private String name;
@Column(name = "ATTRIBUTE_VALUE")
private String value;
}
@Entity
@DiscriminatorValue("TABLE_B")
public class ClassB extends ClassA { ... }
另一种方法是创建一个共同的祖先类,并将Table_A
映射到它自己的子类实体。