【问题标题】:Problem with spring.jpa.hibernate.ddl-auto=update in application.propertiesapplication.properties 中 spring.jpa.hibernate.ddl-auto=update 的问题
【发布时间】:2019-08-28 08:26:54
【问题描述】:

我对文件application.properties 有疑问,在这一行:

spring.jpa.hibernate.ddl-auto=update

当我从我的实体中删除一些属性时,这些属性仍然保留在数据库中。

这是 application.properties 的副本:

spring.jpa.generate-ddl=true
spring.jpa.show-sql = true
spring.jpa.hibernate.ddl-auto=update
spring.jpa.properties.hibernate.dialect = 
org.hibernate.dialect.MySQL5Dialect
spring.datasource.driverClassName = com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/taskmanagement
spring.datasource.username = root
spring.datasource.password = 
server.port=89
spring.data.rest.default-media-type= application/json

我该如何解决这个问题?

【问题讨论】:

  • 问题不在于属性
  • 你不能。 update 只会添加新的列和约束。它不会删除列、约束等。此外,您真的不应该将 updatecreate 用于任何其他测试,对于真正的数据库管理,您希望使用 Flyway 或 LiquiBase 之类的东西。
  • Hibernate AFAIK 无法实现可靠的数据库更新。 Flyway 或 Liquidbase 等工具专为数据库迁移而设计

标签: java spring database spring-data-jpa spring-data


【解决方案1】:

如果您想根据对象映射重新创建数据库架构,只需使用:

spring.jpa.hibernate.ddl-auto=create

但是请记住,这会破坏您保存在数据库中的数据。

其他选项是使用create-drop - 这将在应用程序终止时破坏您的数据库架构。

编辑:

您无法在不破坏数据的情况下更新数据库架构。想象一下,您正在更改某个字段的数据类型并且已经有数据。数据库不知道如何转换现有数据。

【讨论】:

  • 是的,我知道,但我不想删除所有数据库中的信息,因为我不能使用 create-drop。我认为这行有问题:spring.jpa.hibernate.ddl-auto=update
  • 是的,我明白这一点,我使用数据库中的一个空表,当我从我的实体中删除一个属性时,这个属性保留在这个空表中。我的问题是如果我使用 create-drop,其他表中的所有信息都将被破坏。
  • 你到底想要什么?
  • 当我从我的实体中删除一个属性时,这个属性将从数据库中删除。(我使用空表)
  • 我的回答有什么问题?你不能用create吗?
【解决方案2】:

属性spring.jpa.hibernate.ddl-autoupdate 值仅尝试添加新列和约束。它不会从表中删除现有列。尝试使用createcreate-drop

【讨论】:

  • 是的,我知道,但我不想删除所有数据库中的信息,因为我不能使用 create-drop。我认为这行有问题:spring.jpa.hibernate.ddl-auto=update
  • 从另一个答案复制相同的评论会有所帮助。正如这个答案(和我的评论)所提到的,update 只会添加新的列和约束。它不会更改数据类型或删除列。所以你不知道(如你所料)。
  • @MohamedDhia 所以你想从表中删除与已删除属性关联的列,但不从数据库中的其他表中删除任何其他信息?使用 ddl-auto 属性无法做到这一点。如果不再需要这些列,您可以从表中手动删除它们。如果属性不存在,这不会导致程序执行出现任何问题
猜你喜欢
  • 2022-08-11
  • 1970-01-01
  • 1970-01-01
  • 2019-05-02
  • 2018-04-11
  • 1970-01-01
  • 2021-04-18
  • 1970-01-01
  • 2020-08-02
相关资源
最近更新 更多