数据库和域模型之间的对象关系映射

Posted

技术标签:

【中文标题】数据库和域模型之间的对象关系映射【英文标题】:Object Relational Mapping between a Database and the Domain model 【发布时间】:2011-03-28 08:39:33 【问题描述】:

我应该遵循哪些规则才能有效地将实体从我的域模型映射到数据库表?

数据库列是否应该与域类属性对齐?

例如我有一个数据库表

Person (varchar)FirstName, (varchar)LastName, int(age)

还有一个域类

class Person()

String firstName;
String lastName;
int age;

应该类和表 包含相同数量的属性 它们是否应该具有相同的对应关系 类型(例如:varchar - 字符串) 最佳做法是什么 要避免什么?

【问题讨论】:

【参考方案1】:

对象-关系映射有很多策略。最终,您必须在某处表示某个字段中的每一段持久数据,这样您的策略才会奏效。您必须回答的其他问题:

1) 您的记录是如何键入的?您是否要为每个班级设置一个唯一的 ID 字段?

2) 你将如何处理继承?如果你有一个 PersonA(Person) 类,它引入了一个附加字段,你会为 Person + PersonA 中的每个字段创建一个全新的表,还是只为附加字段创建一个 PersonA 表?

3) 您打算如何针对数据库构建查询?您是否要提供某种形式的对象查询映射?

那里有很多开源 ORM,所以除非你是为研究项目做这件事,否则我建议你使用其中一个。

【讨论】:

我目前正在开发我的研究生项目。我将使用 Hibernate ORM 和 JPA。

以上是关于数据库和域模型之间的对象关系映射的主要内容,如果未能解决你的问题,请参考以下文章

hibernate 继承映射

44 MySQL & orm对象关系映射

以实例说明啥是“对象—关系映射”?

VS2015 + SQL Server 反向生成实体模型

Hibernate关联映射

在对象关系数据库(Oracle)中映射多对多关系