JPA:我应该从表生成实体,还是从实体生成表?

时间:2017-03-15 10:51:45

标签: java mysql jpa entities

简而言之,我正在开发一个相对较大的新项目......很多桌子,很多协会,无处不在....(到目前为止,我已经创建了UML和MCD)

我想知道从这一步开始的最佳方法是什么:我应该手动创建数据库然后使用JPA生成实体,还是应该首先手动创建实体然后生成我的数据库?这样做的最佳方式是什么,以便我以后可以避免更大的问题...

4 个答案:

答案 0 :(得分:2)

取决于: - )。

  • 如果您的申请"拥有"数据库(是唯一的用户),将数据库视为实现细节通常是有意义的,让JPA创建它。这样,您就不必乱用SQL,数据库总是与JPA期望的相匹配。这对于测试等场景也很有用,正如Essex Boy的回答所述。
  • 如果数据库已经存在,或者要与其他应用程序共享,那么您已经做出了选择 - 您必须使用那里的内容(并小心更改)。
  • 数据库结构可能存在外部限制。也许您必须使用存储过程,或使用某些数据库命名约定,或者在强加约束的更新期间使用工具进行模式迁移。在这种情况下,您需要详细控制数据库结构,这通常意味着您必须自己使用SQL创建它。

因此,请检查您正在使用的约束,然后决定。

答案 1 :(得分:1)

我强烈建议您让实体生成表格。

这也有助于测试和开发,例如,您可以使用为每次测试构建和拆除的H2数据库。

在项目合理推进之前,我甚至不会查看数据库。

JPA实体可以在没有任何表名或列名的情况下开始生活,然后随着项目的进展,可以同意列和表名,而不会对其余代码产生任何影响。

在最终集成阶段,可以对实体JPA注释进行微小更改,以允许Oracle,DB2等特定数据类型异常。

应用程序应负责自己的数据库。这对于一个新项目尤为重要。

答案 2 :(得分:1)

模式生成(由ORM层完成)是一种便利功能,但生成的模式应该在每种情况下由具有数据库(DBA)的人在生产之前进行验证。即使首先创建模式然后创建正确的ORM映射,也是更高效/可靠的方式。

答案 3 :(得分:1)

实体或非实体的表格。永远不要从数据模型创建对象模型。始终从域分析创建对象模型。 JPA 不是数据操作工具,它是一个对象操作工具。

如果您无法控制数据库架构,则只需要它支持对象模型,并弄清楚如何将对象模型映射到关系模型。这就是为什么它被称为对象到关系映射(ORM),而不是关系到对象的映射。

永远不要让数据模型驱动您的对象模型。