使用什么: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中为它创建了一个非空约束)最终也会检查它并且不允许你保存空值
当看到为什么大多数程序员对数据库 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中为它创建了一个非空约束)最终也会检查它并且不允许你保存空值