【问题标题】:How to map two classes to one DB table in Hibernate如何在 Hibernate 中将两个类映射到一个 DB 表
【发布时间】:2012-05-28 17:27:03
【问题描述】:

我正在学习 Hinbernate,所以如果我可以将两个类映射到一个 DB 表,那么一个想法通过了。

例如:

Class Developer {
    String name;
}

Class Manager {
    String name;
}

虽然这两个类都映射到一个表,但假设名称为 Employee,其中一列是 String 数据类型。

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

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

【问题讨论】:

    标签: hibernate hibernate-mapping


    【解决方案1】:

    当您使用xml映射文件时,您只需创建两个映射文件Developer.hbm.xml和Manager.hbm.xml,它们都引用同一个数据库表。这行得通。

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

    因此,鉴别器行不是绝对必要的,但强烈推荐。

    【讨论】:

    • 哦,那么可以做类似的事情。虽然存在数据不一致等问题......
    • 是的。您可以避免这些与程序中的逻辑不一致的情况。然而,在大多数情况下,这是糟糕的数据库设计。
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2010-12-12
      • 2017-11-01
      • 2012-02-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-20
      相关资源
      最近更新 更多