【问题标题】:ORM question - JPAORM 问题 - JPA
【发布时间】:2010-06-28 02:18:12
【问题描述】:

我正在阅读 Pro JPA 2。这本书从前几页讨论 ORM 开始。

它讨论了使用以下实例变量映射一个名为 Employee 的 Java 类 - id、name、startDate、salary。

然后继续讨论如何在关系数据库中表示此类的问题,并提出以下方案。

表 A:emp id - 主键 开始日期

表 B:emp_sal id - 此表中的主键,也是引用表 A 中 'id' 列的外键。

因此似乎表明将 Employee 实例持久化到数据库需要对两个(多个)表进行操作。

Employee 类首先应该有一个实例变量“salary”吗?

我认为它可能应该属于一个单独的类(可能是类薪水?)代表薪水,因此该示例似乎不是很直观。

我在这里错过了什么?

【问题讨论】:

  • 这不是 JPA 问题,而是一般的 ORM 问题。如果需要,我会更改标签(对于纯粹主义者来说)。

标签: orm jpa


【解决方案1】:

首先,作者解释了在数据库中表示一个类有多种方法:有时类到表的映射很简单,有时您之间没有直接对应关系属性和列,有时单个类由多个表表示:

在场景 (C) 中,EMP 表有 被分割了,所以工资 信息存储在单独的 EMP_SAL 表。这允许 数据库管理员限制 选择访问工资信息以 那些真正需要它的用户。 有了这样的映射,即使是单个 Employee 类的存储操作 现在需要插入或更新两个 不同的表。

因此即使将单个类的数据存储在数据库中也可能是一项具有挑战性的工作

然后,他描述了关系的不同之处。在对象级模型中,您通过对象的关系遍历对象。在关系模型级别,您使用外键和连接(有时通过在对象模型级别甚至不存在的连接表)。

继承是另一个“问题”,可以在关系模型级别以各种方式“模拟”:您可以将整个层次结构映射到单个表中,您可以将每个具体类映射到它的自己的表,您可以将每个类映射到自己的表。

换句话说,对象模型和关系模型之间没有直接且唯一的对应关系。两者都依赖于不同的范式,并且拟合并不完美。两者之间的区别被称为impedance mismatch,这是 ORM 必须处理的事情(允许对象模型与关系模型中的许多可能表示之间的映射)。这就是您正在阅读的整个部分的内容。这也是你错过的:)

【讨论】:

    猜你喜欢
    • 2013-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-12
    • 2014-03-27
    • 2015-07-13
    • 2011-03-24
    • 1970-01-01
    相关资源
    最近更新 更多