如何在Hibernate中将两个类映射到一个DB表

时间:2012-05-22 08:24:51

标签: hibernate hibernate-mapping

我正在学习Hinbernate,所以如果我可以将两个类映射到一个数据库表,那么就会通过思考。

前:

Class Developer {
    String name;
}

Class Manager {
    String name;
}

虽然这两个类都映射到一个表,但我们可以通过名称Employee使用一列String数据类型。

Hibernate能否根据我用于创建的类在表中创建行。 或者你认为应该有一个鉴别器列来区分类?

注意:类之间没有继承关系,它们是分开的。

2 个答案:

答案 0 :(得分:1)

当您使用xml映射文件时,您只需创建两个映射文件Developer.hbm.xml和Manager.hbm.xml,它们都引用相同的数据库表。这很有效。

问题是,您必须确保仅将表行作为开发人员或管理器加载,而不是同时加载。例如,如果您使用session.createQuery("from Developer")session.createQuery("from Manager")加载它们,那么您在会话缓存中有两次相同的行。如果您首先修改并更新Developer,之后您在Manager中修改并更新了同一行,那么Developer中的修改将丢失,并且会话缓存不一致。

因此,鉴别行并非绝对必要,但强烈建议。

答案 1 :(得分:0)

好吧,请考虑数据库架构,而不是对象模型。任何人(无论是你还是Hibernate),从你的表中给出一条记录,告诉它实际上是哪一个实体?

您需要引入一些类层次结构并使用SINGLE_TABLE继承,方法是添加一个鉴别器列来指定类型或将这些实体映射到不同的表中。