当前位置: 首页 > 知识库问答 >
问题:

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

陶沛
2023-03-14

我正在学习Hinbernate,所以如果我能将两个类映射到一个DB表,我的想法就被忽略了。

Ex:

Class Developer {
    String name;
}

Class Manager {
    String name;
}

虽然这两个类都映射到一个表,但让我们用字符串数据类型的一列来命名Employee。

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

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

共有2个答案

郑博
2023-03-14

好吧,考虑数据库模式,而不是您的对象模型。任何人(无论是您还是Hibernate),从您的表中给定一条记录,如何判断它实际上是哪个实体?

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

荀正谊
2023-03-14

当您使用xml映射文件时,您可以简单地创建两个映射文件Developer.hbm.xml和Manager.hbm.xml,它们都引用同一个数据库表。这很有效。

问题是,您必须确保表行仅作为开发人员或管理人员加载,而不是同时作为开发人员和管理人员加载。例如,如果您使用会话加载它们。createQuery(“来自开发者”)会话。createQuery(“从管理器”),则在会话缓存中有两次相同的行。如果先修改并更新Developer,然后在Manager中修改并更新同一行,则Developer中的修改将丢失,并且会话缓存不一致。

因此,鉴别器行不是绝对必要的,但强烈建议使用。

 类似资料:
  • 问题内容: 我需要将两个表映射到一个类,但很难弄清楚。一个表是ROOMS,另一个表是TRAINERS。 ROOMS表: 培训人员表: 表应当加入了,和。 ROOMS表的主键是:。TRAINERS表的主键是:。 我需要通过查询这个数据,,,,和。 在SQL中,可能类似于: 我正在项目中其他地方使用ROOMS表,它已经映射为独立对象。是否有一种方法可以将其用作TRAINERS对象的子对象,或者将这两个

  • 但是当我运行应用程序时,我会得到以下异常:

  • <![CDATA[插入MEMBER_SERVICE_RECORD(MEMBER_ID,SERVICE_DATE,service_milees,SERVICE_DESC,MODIFIED_DATE)值(?,?,?,?,?)]]>

  • 我有两个地图,键为整数,值为双倍。 我想创建第三个按键排序的映射,值将是两个映射的双精度列表。 地图1: Map2: 最终地图: 如上所述,如果一个地图中的一个键在另一个地图中丢失,则另一个地图的最终地图中的值应默认为0.00 我可以使用putAll方法将所有键放入第三张地图。但如何按照我的意愿设定这些值呢? 感谢阅读!

  • 问题内容: [‘a’,’a’,’b’,’c’,’c’,’c’] 至 和 问题答案: x=[‘a’,’a’,’b’,’c’,’c’,’c’] >>> map(x.count,x) [2, 2, 1, 3, 3, 3] >>> dict(zip(x,map(x.count,x))) {‘a’: 2, ‘c’: 3, ‘b’: 1} >>>

  • 我需要映射两个GET方法,如下所示: 但当我绘制这张地图时,Spring被搞糊涂了! 当我击中http://localhost:8080/tickets在Chrome中,服务器上的结果是: 当我击中http://localhost:8080/tickets/12在Chrome中,服务器上的结果是: 我的Spring控制器是: 我的单元测试是: 我正在使用Java11和SpringBoot2.1.6