在公共表的情况下使用Hibernate来保存多个表的元数据

时间:2013-12-17 09:29:14

标签: java hibernate

我有以下情况:

有一个表维护与多个实体相关的元数据。下面是架构以及表格的外观:

Sample Table

TABLE_ATABLE_B都被映射为Hibernate实体,并由ClassAClassB支持。 现在,我如何在Hibernate中映射此表,以便我可以实现以下场景:

ClassA classA = aService.getById("1234");

ClassB classB = bService.getById("1234");

classA.getAttributeValue(); -- Should return 12ab

classB.getAttributeValue(); -- Should return cs12

有没有一种方法可以让Hibernate根据调用该方法的对象类型智能地获取AttributeValue

1 个答案:

答案 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映射到它自己的子类实体。