Hibernate不会改变现有的列是否有缺点?

app*_*app 1 java spring hibernate jpa

我有一个连接到PostgreSQL数据库的Spring Boot应用程序。DAO层是使用Hibernate和实现的,JPAauto-ddl启用了它,以便Hibernate负责创建表

今天突然,我的朋友要我将其中一种列类型更改BigIntegerString,然后我说这是不可能的,因为该列中已经填充了数据,并且休眠状态不允许

现在他告诉休眠状态是不利的,我们还讨论了公司是否根据生产需求更改列定义?

  1. 休眠真的有缺点吗?
  2. IT公司或任何组织是否经常更改生产中的列定义?

Krz*_*sik 6

您永远不要auto-ddl生产中使用。它从未打算用于生产,而是用于开发。之所以不使用它,是因为它可能会创建非最佳的DDL或仅损坏您的数据。

在数据库中进行更改的首选方法是创建一个文件夹,该文件夹将包含所有更改数据库结构并将其存储在版本控制中的SQL脚本。通用名称是migrations。然后,你可以手动在您的数据库或使用工具,如运行这些脚本迁徙路线(我的建议),或liquibase

那么如何利用auto-ddl呢?例如,您可以为新实体创建一个表,然后使用用于创建它的DDL,并在进行了一些调整(如有必要)之后将其存储在迁移中。您还可以使用验证hibernate.hbm2ddl.auto与实体检查,如果你的数据库匹配。

最后回答您的问题:

  1. 不,这不是休眠的缺点,因为auto-ddl它从未打算进行数据库迁移。
  2. 公司绝不使用实用程序更改数据库auto-ddl。有人(DBA或开发人员)准备迁移脚本,然后手动或通过发行时的迁移工具应用它。

  • 仅在最初的几个单词中,这个答案值得推荐!!任何在“生产”中使用auto-ddl的人都不了解生产的含义。 (2认同)