使用什么:sql 迁移或 Spring/Hibernate 中的实体设置?

What to use: sql migration or entity setups in Spring/Hibernate?

当看到为什么大多数程序员对数据库 table 约束使用基于注释的设置时,我有点困惑。例如

@Column(unique=true, nullable=false)

为什么我们需要它,如果(我听说)在实际项目中主要使用 SQL 迁移,那么您可以在 table 个创建中创建此约束,例如 CREATE table... name varchar UNIQUE NOT NULL.

我是否需要以两种方式设置它,还是在 SQL 中设置就足够了? 项目中 SQL 迁移(Flyway、Liquibase)的使用频率如何?

此外,Hibernate 在数据库中创建了不可读的约束,否则在 SQL 中您创建了可理解的约束名称。

您可以选择是否让 Hibernate 管理您的架构。如果是,数据库模式将根据注释映射的变化创建或更新。

我个人不会让 Hibernate 管理我的数据库模式,因为我想确切地知道模式更改发生了什么。 hibernate documentation 也以某种方式暗示它:

Although the automatic schema generation is very useful for testing and prototyping purposes, in a production environment, it’s much more flexible to manage the schema using incremental migration scripts.

而Flyway,Liquibase是那种增量迁移脚本工具。

Do I need to setup it in both ways, or is it enough to do in SQL? And how often SQL migrations used(Flyway, Liquibase) in projects?

如果您不使用自动模式生成功能,则无需在 @Column 中指定 unique,这仅在自动模式生成的情况下有意义。

对于 nullable ,它取决于 hibernate.check_nullability setting.If 它是否打开并且您设置了 @Column(nullable=false) ,Hibernate 将帮助检查此列不能为空应用程序级别而不要求数据库检查它。但是即使不设置,数据库约束(假设你在DB中为它创建了一个非空约束)最终也会检查它并且不允许你保存空值