JPA,从实体开始还是从数据库模式开始?

3

在使用JPA时,特别是在开始新项目时,哪种方法更好?

是先设计实体,然后让JPA生成数据库,还是先从数据库模式开始,让工具生成实体类?

我是一个小公司的一员,既是软件开发人员又是DBA。我对应用程序和数据库的设计有完全的自由。

我刚刚开始这个项目。

6个回答

3
如果您想设计数据库,那么应该从模式(schema)开始。如果您想编写软件,那么应该从实体(entities)开始。ORM的目的是让您思考对象模型而无需担心存储它的数据库,因此,这类问题实际上混淆了领域之间的交叉。您是软件开发人员还是DBA? 这比您使用JPA更能确定正确答案。

我是一家小公司的一部分。我既是软件开发人员,也是数据库管理员。我在应用程序和数据库设计方面拥有完全自由。 - nathaniel.camomot

1
Um- 都不需要吧?JPA的强大之处在于您无需从另一个生成一个!如果您已经有了实体或数据库模式的生成,则可能是一个很好的起点;但是生成的东西不是您长期想要使用的内容。
您不能仅考虑映射的一侧而设计。如果您将与其他应用程序共享数据库,则需要更多地考虑数据库模式。如果您的应用程序具有复杂的模型,则首先要关注对象模型,使其由您开发应用程序时发现的用例驱动。
我倾向于首先从对象模型开始(即使没有支持的数据库),因为这样可以让我更早地看到应用程序的运行情况,并对我们真正想要构建的内容有所了解。但是与数据库的集成必须尽早发生;因为它的限制会迅速对您的对象模型产生影响。 :-)

1

这取决于个人的需求。通常在产品开发环境中,有不同的团队负责数据库设计、界面设计和实现。因此,在这种情况下,你只能从已有的数据库设计生成JPA实体。 其次,如果你从头开始并知道自己要做什么,那么可以编写自己的实体(Java类),然后从中生成数据库。


1

如果您具有完全的灵活性,并且不受数据库模式的限制,并且希望在Java应用程序中拥有清晰的对象模型,则应从模型开始,并从模型生成模式。这还允许您从干净的模型生成干净的JSON表示形式,以作为使用诸如Jackson(或GSON)等技术的对象的在线格式。

首先进行DB模式并从中反向工程化模型类将导致关系概念渗入您的模型类,从而导致模型质量差(污染)。

总之,除非您的手被绑定并且必须映射到某个现有模式,否则请先进行模型设计。


0
最好选择数据库方案。因为在JPA生成的数据库中,一些功能是不可用的。在JPA中,我们无法为列设置默认值。请查看这里以了解JPA中允许的属性。

0
这取决于你。是采用自顶向下还是自底向上的方法。如果此模式仅适用于您的应用程序,请查看团队成员和分析师对ORM或DB的理解方式。根据我的经验,分析师在表格方面更容易理解。但如果他们乐意以类或UML图表来讨论,那就选择JPA。同时,要考虑到DBA和构建工程师的观点。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接