spring.jpa.hibernate.ddl-auto=validate 是不是会更改数据库模式?
Posted
技术标签:
【中文标题】spring.jpa.hibernate.ddl-auto=validate 是不是会更改数据库模式?【英文标题】:Does spring.jpa.hibernate.ddl-auto=validate make changes in DB schema?spring.jpa.hibernate.ddl-auto=validate 是否会更改数据库模式? 【发布时间】:2017-10-13 09:19:22 【问题描述】:在生产环境中,我使用的是 spring.jpa.hibernate.ddl-auto=validate 但我发现新列会自动添加到我的生产数据库中。
我已经使用虚拟应用程序完成了一个小型 POC,它没有在我的本地系统上添加列。
谁能帮我了解spring.jpa.hibernate.ddl-auto=validate
属性可能存在的问题。
感谢任何帮助。
PFA 我访问了文档,但没有获得足够的详细信息:
文档网址: enter link description here
【问题讨论】:
如果任何名为“验证”的东西发生了变化,那么你应该报告它,因为这就是“更新”的目的。 您提到了一个用于传递到 Hibernate 的弹簧配置,但您没有提及哪些列或提供任何您看到的更改的示例?您看到添加的列与某些与 Hibernate 无关的 spring-data-jpa 特定实现无关。更多详细信息将对 imo 有所帮助。 【参考方案1】:是的,在生产环境中,spring.jpa.hibernate.ddl-auto=update
是从外部 .properties 文件传递的。
现在我很确定 spring.jpa.hibernate.ddl-auto=validate
永远不会更新数据库架构。
谢谢大家。
【讨论】:
【参考方案2】:validate
不应更改您的数据库架构。
如果是这样,您应该提出问题,尽管我怀疑这是否真的发生了。
我认为更有可能
您有多种配置,其中一种配置与您正在查看的配置不同。 完全不同的是您的数据库架构。为了调试这种情况,请执行以下操作:
-
确保您可以重现架构更改行为,例如通过添加和删除实体。
逐步从项目中删除所有对于重现行为而言不必要的内容。这应该会给您留下一个很小的项目:一个构建文件、一个实体、一个代表您的应用程序以启动所有内容的类,可能还有一个或两个配置文件。
如果您确实成功执行了第 2 步,同时仍然重现架构更改行为,请更新您的问题或直接提交错误。
如果(我目前所期望的)在第 2 步中的某个时间点,奇怪的行为消失了,您就找到了罪魁祸首。
如果不是很明显:您希望使用版本控制来完成所有这些操作,以便您可以撤消/重做/查看步骤。
【讨论】:
以上是关于spring.jpa.hibernate.ddl-auto=validate 是不是会更改数据库模式?的主要内容,如果未能解决你的问题,请参考以下文章
当为 Postgres DB 的属性 spring.jpa.hibernate.ddl-auto 提供更新值时,Hibernate 不会生成序列
spring.jpa.hibernate.ddl-auto 属性在 Spring 中是如何工作的?
spring.jpa.hibernate.ddl-auto=validate 或更新返回 beans.factory.BeanCreationException
spring.jpa.hibernate.ddl-auto=create 在带有 SpringBoot 2.0 的 Hibernate 5 中不起作用