当前位置: 首页 > 面试题库 >

spring.jpa.hibernate.ddl-auto属性在Spring中如何正常工作?

张丁雷
2023-03-14
问题内容

我当时在从事我的Spring Boot应用程序项目,并注意到,有时到另一个服务器(SQL
Server)上的数据库存在连接超时错误。当我尝试执行一些脚本迁移时,这种情况会特别发生,FlyWay但在尝试几次后仍可以正常工作。

然后我注意到我没有spring.jpa.hibernate.ddl-auto在属性文件中指定 。我做了一些研究,发现建议增加
spring.jpa.hibernate.ddl-auto= create- drop开发。并将其更改为:spring.jpa.hibernate.ddl-auto= none生产中。

但是我实际上并不了解它实际上是如何工作的,以及hibernate如何使用create- dropnone值生成数据库模式。您能否从技术上解释它是如何工作的,以及在开发和生产服务器上使用此属性的建议?谢谢


问题答案:

作为记录,该spring.jpa.hibernate.ddl-auto属性是Spring Data
JPA特定的,并且是他们指定一个值的方法,该值最终将在其已知的属性下传递给Hibernate hibernate.hbm2ddl.auto

createcreate-dropvalidate,和update基本上影响架构管理工具将如何处理在启动数据库模式。

例如,该update操作将查询JDBC驱动程序的API以获取数据库元数据,然后Hibernate将根据读取带注释的类或HBM
XML映射来比较它创建的对象模型,并尝试动态调整架构。

update例如,该操作将尝试添加新的列,约束等,但绝不会删除以前可能已存在但不再作为先前运行的对象模型一部分的列或约束。

通常,在测试用例场景中,您可能会使用create- drop它来创建架构,测试用例添加一些模拟数据,运行测试,然后在测试用例清理期间删除架构对象,从而留下一个空数据库。

在开发中,通常会看到开发人员update用来自动修改架构以在重新启动后添加新的内容。但是要再次理解,这不会删除以前的执行中可能不再存在的列或约束。

在生产中,通常强烈建议您使用none或根本不指定此属性。这是因为DBA通常会检查迁移脚本以进行数据库更改,尤其是在跨多个服务和应用程序共享数据库的情况下。



 类似资料:
  • 我在处理Spring boot应用程序项目时注意到,有时在另一台服务器(SQL server)上出现到数据库的连接超时错误。当我尝试使用进行一些脚本迁移时,特别会发生这种情况,但尝试了几次后它仍然工作。 然后我注意到我没有在属性文件中指定。我做了一些研究,发现建议在开发中添加。并在生产中将其更改为:。

  • 在第一次测试运行期间,如果我使用或而不是,则会发生以下错误(请参阅错误消息)。使用时,应用程序启动并工作时只会出现一个错误:“error o.h.e.j.e.i.jdbconvironmentimpl-无法从数据库java.sql.SQLException:数值溢出” 如果你能帮助我,我将非常高兴。不幸的是,以前的论坛报名没有成功。 应用程序 Oracle设置 HikariCP设置 登录中 JPA

  • Symbol 是 ECMAScript 6 新引入的基本类型。其它基本类型包括:字符串类型(string),数字类型(number),布尔类型(boolean),null 和 undefined 。对象可以使用 symbol 来创建私有成员,这也是 JavaScript 开发者长久以来期待的一项特性。在 symbol 引入之前,若不论名称本身,任何字符串属性都可以很容易地被访问,而 “私有命名(p

  • 我明白了,但如果添加一个实例还不够,CPU使用率仍然超过60%,会发生什么情况,自动缩放组是否会添加更多EC2实例,直到CPU使用率低于60%?

  • 我有一个Spring boot:2.3.0.发布应用程序,其中flyway:6.4.1和hibernate:hibernate-core:5.4.22.final,hibernate-validator:6.1.5final,hibernate-commons-annotations:5.1.0final. 我试着寻找错误,但找不到解决方法。我尝试应用这个答案,但是无论何时设置了spring.jp