java - ORM建模: Database first vs classes first

标签 java mysql hibernate orm enterprise-architect

我正在尝试使用 Sparx Enterprise Architect 设计一个数据模型,该模型最终将存储在 MySQL 数据库中。

我的第一个方法是 Data Model diagram , 可用于 generate DDL (或通过 reverse engineering 反过来)。

这很有效,但一位同事指出了一个问题:我们打算使用 ORM(几乎可以肯定是 Hibernate)将表映射到 Java 类。他的评论是“数据库优先”的方法将排除使用良好的 OO 技术,例如继承。

这似乎是一个好点,但我想知道是否有任何限制。如果我从头开始使用 Class Diagram代替数据模型图,是否有一种方法可以在此模型中包含所有必要的 Hibernate 注释、配置等?而且,如果我以后需要对特定于数据库的功能(例如约束、触发器等)进行建模,考虑到类图并不是真正针对此类事物,所有这些都可以在模型中实现吗?

最佳答案

我用一个问题来回答:如果你要盖房子,你是先盖好再做蓝图还是先做计划? :)

软件开发就是逐渐降低抽象。我们从一个非常抽象的项目想法开始,然后提出一些要求(这显然不那么抽象),然后是架构、设计和最终进入编码级别(最低抽象)

数据模型是最低抽象级别的模型(可直接映射到 DDL),因此这是您要做的最后一件事。

领域类模型是数据库的更高抽象。它甚至是 Hibernate 层的抽象,因为它也位于抽象的实现级别。

因此,我肯定会首先使用类和 OO 的全部功能为域建模。尝试使实现独立的类模型。不要假设 JAVA、Hibernate、DB 等任何东西,而是专注于您的域逻辑。制作一种“乌托邦”域模型,逻辑上结构完美的域类。

然后使用相应的转换从该模型派生出 Hibernate 层和 DB 本身。

关于java - ORM建模: Database first vs classes first,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23952011/

相关文章:

java - 使用 for 循环将数字添加到 ArrayList - Java

java - super CSV 和推土机 : Can't find SurveyResponse class

mysql - 1 从 2 个选择查询中删除查询

mysql - 编写包含多个 OR 的 SQL 查询的更好方法

spring - 属性 'configurationClass'不可写或具有无效的setter方法。 setter 的参数类型

java - hibernate : Table doesn't get updated

java - 鼠标滚轮闪烁,更多关于原因

java - 如何仅对特定行禁用 log4j 时间戳

Mysql Where子句不获取数据

java - 创建Bean时出错 - Java - Maven 3.5 - Spring 5 - Hibernate 5