使用JPA时的标准工作流程

Jac*_*oen 6 java workflow jpa

我目前正在尝试与JPA合作.我情不自禁地觉得我错过了一些东西,或者做错了.到目前为止,这似乎是被迫的.

到目前为止,我认为我知道他们有几种方法可以使用JPA和工具来支持这一点.

  • 您可以使用注释在Java中执行所有操作,并让JPA(您决定使用的任何实现)创建架构并在进行更改时更新它.
  • 您可以使用工具对数据库进行反向工程,并为您生成实体类.更新架构后,您必须重新生成这些类,或手动更新它们.

这两者似乎都有缺点,并且两者都有好处(和所有事情一样).我的问题是在理想的情况下,JPA的标准工作流程是什么?大多数模式在维护阶段都需要更新,特别是在开发阶段,所以如何处理?

Boz*_*sov 1

从带注释的实体生成数据库模式并不总是一个好方法。尽管理论上听起来不错,但实际上生成的模式通常不是最佳的,并且无法满足经验丰富的 DBA。

我在工作流程中遵循的方法是分别创建实体和数据库模式,同时仍然使用非常智能的工具来创建模式 - 要么像Liquibase那样,与数据库无关,支持修订、回滚等...要么一个自定义烘焙迁移工具,只需运行高度优化的数据库特定 SQL 脚本。

这对您来说可能听起来不太理想,但我可以保证它可以完成工作并保持与模式相关的代码一致,因为正如 grigory 指出的那样 - 无论如何,并不是与数据库相关的所有内容都可以从实体生成。

但是,我可以从正在运行单元和集成测试的测试数据库的实体生成模式。假设你使用的是 PostgreSQL 是生产环境,你可能会决定加快单元测试的速度,运行一些嵌入式内存数据库,比如 H2,它是在测试开始之前从实体创建的,并自动消失(因为它是在内存中的) )测试完成执行后。这是一种非常常见的做法。