我想听一下Hibernate专家关于基于Hibernate/JPA的项目中最佳DB架构生成实践的意见。尤其是:
在项目刚开始时使用什么策略?这个阶段推荐让Hibernate自动生成架构,还是更好地从项目的早期手动创建数据库表格?
假设整个项目都是使用Hibernate生成架构,是禁用自动架构生成并在系统发布到生产之前手动创建数据库架构更好呢?
在系统发布到生产后,如何最好地维护实体类和DB架构(例如添加/重命名/更新列,重命名表等)?
我想听一下Hibernate专家关于基于Hibernate/JPA的项目中最佳DB架构生成实践的意见。尤其是:
在项目刚开始时使用什么策略?这个阶段推荐让Hibernate自动生成架构,还是更好地从项目的早期手动创建数据库表格?
假设整个项目都是使用Hibernate生成架构,是禁用自动架构生成并在系统发布到生产之前手动创建数据库架构更好呢?
在系统发布到生产后,如何最好地维护实体类和DB架构(例如添加/重命名/更新列,重命名表等)?
建议手动生成数据库模式,最好使用支持数据库模式修订的工具(如优秀的Liquibase)。虽然从实体中生成模式在理论上很棒,但在实践中易受损,并在长期运行中导致许多问题(相信我)。
在生产环境中,最好手动生成并检查模式。
当对实体进行更新时,请创建一个匹配的更新脚本(修订),以更新数据库模式以反映实体变更。您可以创建自定义解决方案(我写过几个),或使用像Liquibase这样更流行的工具(它甚至支持模式更改回滚)。如果您正在使用构建工具(如Maven或Ant),建议将数据库模式更新工具插入构建过程中,以便新构建与模式保持同步。
虽然有争议,但我认为对于所有3个问题的答案都是:让hibernate自动在模式中生成表。
到目前为止,我没有遇到任何问题。您可能需要定期手动清理一些字段,但这与单独跟踪DDL脚本(即管理其修订版本并将其与实体更改同步 - 反之亦然)相比不麻烦。
对于部署到生产环境的提示-一个明显的提示-首先确保在测试环境上一切都正常生成,然后再部署到生产环境。
手动操作,因为:
我会在独立应用程序或通过相同ORM层访问的数据库中使用自动生成。如果应用程序需要移植到不同的数据库,则可以节省大量时间,因为无需编写和维护特定于DB供应商的DDL脚本。