JPA:我应该从表中生成实体,还是从实体中生成表?
JPA: should I generate entities from tables, or generate tables from entities?
简而言之,我正在做一个比较大的新项目...很多表,很多关联,inheretence....(到目前为止我已经创建了 UML 和 MCD)
我想知道从这一步开始的最佳方法是什么:我应该手动创建数据库然后使用 JPA 生成实体,还是应该先手动创建实体然后生成我的数据库?执行此操作的最佳方法是什么,这样我以后就可以避免更大的问题...
我强烈建议您让实体生成 tables。
这也有助于测试和开发,例如,您可以使用为每次测试构建和拆除的 H2 数据库。
在项目合理推进之前,我什至不会查看数据库。
JPA 实体可以在没有任何 table 或列名称的情况下开始使用,然后随着项目的推进,列和 table 名称可以商定,而不会对其余代码产生任何影响。
在最后的集成阶段,可以对实体 JPA 注释进行微小的更改,以允许 Oracle、DB2 等的特定数据类型异常。
应用程序应对自己的数据库负责。这对于新项目尤其重要。
视情况而定:-)。
- 如果您的应用程序 "owns" 数据库(是唯一的用户),将数据库视为实现细节并让 JPA 创建它通常是有意义的。这样,您就不必弄乱 SQL,并且数据库始终与 JPA 期望的相匹配。正如 Essex Boy 的回答所述,这对于测试等场景也很有用。
- 如果数据库已经存在,或者打算与其他应用程序共享,那么您的选择已经做出 - 您必须使用现有的(并谨慎更改)。
- 数据库结构可能存在外部约束。也许您必须使用存储过程,或使用某些数据库命名约定,或者在施加约束的更新期间使用模式迁移工具。在那种情况下,您将需要对数据库结构进行详细控制,这通常意味着您必须使用 SQL.
自己创建它
所以,检查一下你工作的限制,然后再决定。
模式生成(由 ORM 层完成)是一项方便的功能,但在投入生产之前,生成的模式在每种情况下都应由熟悉数据库的人员(DBA)进行验证。即使先创建模式,然后再创建正确的 ORM 映射也是性能更高/更可靠的方法。
来自实体的表或两者都不是。永远不要从数据模型创建对象模型。始终从域分析创建对象模型。 JPA 不是数据操作工具,它是对象操作工具。
如果您无法控制数据库架构,则只能希望它支持对象模型,并弄清楚如何将您的对象模型映射到关系模型。这就是为什么它被称为对象到关系映射 (ORM),而不是关系到对象映射的原因。
永远不要让数据模型驱动您的对象模型。
简而言之,我正在做一个比较大的新项目...很多表,很多关联,inheretence....(到目前为止我已经创建了 UML 和 MCD)
我想知道从这一步开始的最佳方法是什么:我应该手动创建数据库然后使用 JPA 生成实体,还是应该先手动创建实体然后生成我的数据库?执行此操作的最佳方法是什么,这样我以后就可以避免更大的问题...
我强烈建议您让实体生成 tables。
这也有助于测试和开发,例如,您可以使用为每次测试构建和拆除的 H2 数据库。
在项目合理推进之前,我什至不会查看数据库。
JPA 实体可以在没有任何 table 或列名称的情况下开始使用,然后随着项目的推进,列和 table 名称可以商定,而不会对其余代码产生任何影响。
在最后的集成阶段,可以对实体 JPA 注释进行微小的更改,以允许 Oracle、DB2 等的特定数据类型异常。
应用程序应对自己的数据库负责。这对于新项目尤其重要。
视情况而定:-)。
- 如果您的应用程序 "owns" 数据库(是唯一的用户),将数据库视为实现细节并让 JPA 创建它通常是有意义的。这样,您就不必弄乱 SQL,并且数据库始终与 JPA 期望的相匹配。正如 Essex Boy 的回答所述,这对于测试等场景也很有用。
- 如果数据库已经存在,或者打算与其他应用程序共享,那么您的选择已经做出 - 您必须使用现有的(并谨慎更改)。
- 数据库结构可能存在外部约束。也许您必须使用存储过程,或使用某些数据库命名约定,或者在施加约束的更新期间使用模式迁移工具。在那种情况下,您将需要对数据库结构进行详细控制,这通常意味着您必须使用 SQL. 自己创建它
所以,检查一下你工作的限制,然后再决定。
模式生成(由 ORM 层完成)是一项方便的功能,但在投入生产之前,生成的模式在每种情况下都应由熟悉数据库的人员(DBA)进行验证。即使先创建模式,然后再创建正确的 ORM 映射也是性能更高/更可靠的方法。
来自实体的表或两者都不是。永远不要从数据模型创建对象模型。始终从域分析创建对象模型。 JPA 不是数据操作工具,它是对象操作工具。
如果您无法控制数据库架构,则只能希望它支持对象模型,并弄清楚如何将您的对象模型映射到关系模型。这就是为什么它被称为对象到关系映射 (ORM),而不是关系到对象映射的原因。
永远不要让数据模型驱动您的对象模型。