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不会被删除)
答案 0 :(得分:0)
您可以使用 spring.jpa.*
属性显式配置 JPA 设置。例如,要创建和删除表,您可以在 application.properties 中添加以下行:
spring.jpa.hibernate.ddl-auto=create-drop
Hibernate 自己的内部属性名称(如果您碰巧记得更好的话)是 hibernate.hbm2ddl.auto
。
spring.jpa.hibernate.ddl-auto
这实际上是 "hibernate.hbm2ddl.auto"
属性的快捷方式。
在使用嵌入式数据库且未检测到架构管理器时默认为 "create-drop"
。否则,默认为 "none"
。
Spring Boot 可以自动创建数据源的架构(DDL 脚本)并对其进行初始化(DML 脚本)。
它从标准根类路径位置加载 SQL:分别为 schema.sql
和 data.sql
。
此外,Spring Boot 处理 schema-${platform}.sql
和 data-${platform}.sql
文件(如果存在),其中 platform 是 spring.datasource.platform
的值。
这允许您在必要时切换到特定于数据库的脚本。例如,您可以选择将其设置为数据库的供应商名称(hsqldb、h2、oracle、mysql、postgresql 等)。