ORM问题 - JPA

时间:2010-06-28 02:18:12

标签: orm jpa

我正在阅读Pro JPA 2.本书的讨论首先是在前几页讨论ORM。

它讨论了将名为Employee的单个Java类映射到以下实例变量 - id,name,startDate,salary。

然后继续讨论如何在关系数据库中表示此类,并建议以下方案。

表A:emp id - 主键 的startDate

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

因此,似乎建议将Employee实例持久保存到数据库中需要对两个(多个)表进行操作。

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

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

我在这里缺少什么?

1 个答案:

答案 0 :(得分:1)

首先,作者解释说,在数据库中表示类有多种方法:有时候类到表的映射是直截了当的,有时你之间没有直接的对应关系。属性和列,有时单个类由多个表表示:

  

在方案(C)中,EMP表具有   被拆分以便获得薪水   信息存储在一个单独的   EMP_SAL表。这允许   数据库管理员限制   对工资信息的SELECT访问权限   那些真正需要它的用户。   有了这样的映射,即使是单一的   存储Employee类的操作   现在需要插入或更新两个   不同的表格。

所以甚至将数据从单个类存储到数据库中也是一项具有挑战性的练习

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

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

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