java - Hibernate 不改变现有的列是一个缺点吗?

标签 java spring hibernate jpa

我有一个连接到 PostgreSQL 数据库的 spring boot 应用程序。 DAO 层是使用 HibernateJPA 实现的,并且启用了 auto-ddl 以便 hibernate 负责创建表

今天我的 friend 突然让我将其中一个列类型 BigInteger 更改为 String,然后我说这是不可能的,因为该列已经充满了数据并且 hibernate 将不允许这样

现在他说这是 hibernate 的缺点,我们还讨论了公司是否会根据生产需求更改列定义?

问题

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

最佳答案

你不应该在 production 中使用 auto-ddl .它从未打算用于生产,而是用于开发。您不应该使用它的原因是它可能会创建非最佳 DDL 或只会损坏您的数据。

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

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

最后回答你的问题:

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

关于java - Hibernate 不改变现有的列是一个缺点吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55734694/

相关文章:

java - 在所有线程(池中)完成后如何打印摘要消息?

java - 什么方法/类等使用这个 .jar?

Spring Boot 测试 MockMvc 执行后 - 不工作

spring - spring boot - redis键分隔符

java - 鉴于这种情况(请参阅内部),是否值得使用 Hibernate?

java - 对象大小和 Java 中的锁定性能之间有关系吗?

java - 什么时候考虑 Java 中的代码效率?

java - 剩余遍历 Neo4j java.lang.UnsupportedOperationException

java - Hibernate + SQLite 不创建表

java - 使用 Hibernate 生成 Create_Date 和 Update_Date 列