使用 ddl-auto 进行 Hibernate:更新总是会更改某些字段

shi*_*123 11 java spring hibernate spring-data-jpa spring-boot

我有一个带有 spring 数据的 spring-boot 项目。我的 application.yml 包含此属性:

spring:
  jpa:
    hibernate:
      ddl-auto: update
Run Code Online (Sandbox Code Playgroud)

每次我运行该项目时,Hibernate 都会对dateenumfloat/double字段执行 ALTER TABLE 语句。

Hibernate show_sql 日志:

Hibernate: alter table activity_data modify column points  float(53)
Hibernate: alter table activity_event modify column end_time  datetime(6)
Hibernate: alter table activity_event modify column start_time  datetime(6)
Hibernate: alter table giveaways modify column state  enum ('CREATED','ENDED','GOING') not null

... and some more
Run Code Online (Sandbox Code Playgroud)

它并没有真正影响项目或导致任何错误,但它确实困扰我,并且可能导致应用程序启动速度变慢

您知道禁用它的任何配置吗?也许发生这种情况是因为休眠无法判断这些列设置是否是最新的?

我为双字段尝试的事情之一是,我尝试手动将手动值设置为列比例:

Hibernate: alter table activity_data modify column points  float(53)
Hibernate: alter table activity_event modify column end_time  datetime(6)
Hibernate: alter table activity_event modify column start_time  datetime(6)
Hibernate: alter table giveaways modify column state  enum ('CREATED','ENDED','GOING') not null

... and some more
Run Code Online (Sandbox Code Playgroud)

但它什么也没改变

小智 -5

如果您不想在启动时更改数据库,您可以在 application.yml 中设置该属性,如下所示:

ddl-auto: none
Run Code Online (Sandbox Code Playgroud)

或者当您需要检查表和实体的映射时

ddl-auto: validate
Run Code Online (Sandbox Code Playgroud)

但是,这些属性意味着您在添加新实体时必须手动创建表。