spring.jpa.hibernate.hbm2ddl和spring.jpa.hibernate.ddl之间的区别

时间:2019-05-09 13:45:58

标签: java spring hibernate spring-boot jpa

spring.jpa.hibernate.hbm2ddl spring.jpa.hibernate.ddl 有什么区别?

我在以下问题中发现:What are the possible values of spring.datasource.initialization-mode? OP在属性中同时使用了两者,但是hbm2ddl的起源似乎直接休眠而不是Spring Data Jpa。

尽管如此,从另一个OP读取answer时,它看起来仅像是直通。

但是,在我们使用mariadb的商业项目中,当我们没有通过 spring.jpa.hibernate.hbm2ddl.auto=create 正常关闭Spring Boot应用程序时,当该应用程序再次运行时,它将删除旧数据并从中创建所有数据刮。另一方面,使用 spring.jpa.hibernate.ddl.auto=create 每秒钟运行一次(在没有正常关闭应用程序之后)会导致关键约束异常(在创建数据库之前,DB不会被删除)

1 个答案:

答案 0 :(得分:0)

  1. 从此Link
  • 默认情况下,只有在您使用嵌入式数据库(H2、HSQL 或 Derby)时才会自动创建 JPA 数据库。

您可以使用 spring.jpa.* 属性显式配置 JPA 设置。例如,要创建和删除表,您可以在 application.properties 中添加以下行:

spring.jpa.hibernate.ddl-auto=create-drop

Hibernate 自己的内部属性名称(如果您碰巧记得更好的话)是 hibernate.hbm2ddl.auto

  1. 从此Link

spring.jpa.hibernate.ddl-auto 这实际上是 "hibernate.hbm2ddl.auto" 属性的快捷方式。

在使用嵌入式数据库且未检测到架构管理器时默认为 "create-drop"。否则,默认为 "none"

  1. 从此Link
  • Spring Boot 可以自动创建数据源的架构(DDL 脚本)并对其进行初始化(DML 脚本)。

  • 它从标准根类路径位置加载 SQL:分别为 schema.sqldata.sql

  • 此外,Spring Boot 处理 schema-${platform}.sqldata-${platform}.sql 文件(如果存在),其中 platform 是 spring.datasource.platform 的值。

  • 这允许您在必要时切换到特定于数据库的脚本。例如,您可以选择将其设置为数据库的供应商名称(hsqldb、h2、oracle、mysql、postgresql 等)。