【问题标题】:How can one add constraints on existing tables via JPA / Hibernate?如何通过 JPA / Hibernate 对现有表添加约束?
【发布时间】:2022-01-12 13:39:48
【问题描述】:

我正在使用带有 JPA / Hibernate 的 Postgresql 数据库。当我向列添加约束时,即“nullable=false”,数据库列不会更改以反映这一点。删除表并重新运行应用程序即可完成这项工作。

这可以通过 JPA/Hibernate 实现吗?机制只需要不删除条目或表吗?就像“尝试更改表并拒绝在不一致的数据上这样做”?在我的 application.properties 中,我设置了

hibernate.hbm2ddl.auto=update

任何其他设置似乎正在删除数据和/或表格。

一个可行的解决方案是运行一个 ALTER TABLE 脚本并相应地添加一个约束注释,但我不太喜欢这个。

【问题讨论】:

    标签: java postgresql spring-boot hibernate jpa


    【解决方案1】:

    无法对现有表添加约束。想一想——如果表中的数据不满足约束怎么办?你会得到整个应用程序的崩溃。所以 Hibernate 甚至没有尝试应用潜在的有害操作。

    一般来说,使用 hibernate 管理数据库模式的方法是错误的。自动生成模式适用于学习或 MVP 目的,但不适用于生产。此外,由于许多原因,SQL 迁移不是一个好主意。你应该使用一个特殊的工具来管理模式:liquibase(对我来说更好)或flywaydb

    【讨论】:

    • 感谢您的回复。当然,您是对的,因为即使是休眠文档也说不要将自动生成用于生产。 Liquibase 与 maven 和 hibernate 插件一起,甚至提供了对现有 db-schema 和更改的实体模型执行差异的可能性,因此我可以获得我想要的。 baeldung.com/liquibase-refactor-schema-of-java-app(以防其他人偶然发现这个问题)。
    猜你喜欢
    • 1970-01-01
    • 2015-02-17
    • 2021-11-20
    • 1970-01-01
    • 1970-01-01
    • 2020-02-09
    • 2017-09-04
    • 2015-06-22
    相关资源
    最近更新 更多