首页 > 解决方案 > 当 spring.jpa.generate-ddl=false 时仍然生成 H2 模式

问题描述

我正在使用 Spring Boot 2.1.3 和内存数据库中的 H2 进行测试。当我运行测试时,即使我指定了以下属性,也会生成架构。

spring.jpa.generate-ddl=false

似乎是因为 Spring Boot 在使用 H2 时默认了以下属性

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

这优先于spring.jpa.generate-ddl=false

这是一个错误吗?

标签: javaspringhibernatespring-bootjpa

解决方案


此行为在第 11.3.3 章的Spring Boot 特性文档中进行了描述。创建和删除 JPA 数据库:

默认情况下,DDL 执行(或验证)会延迟到 ApplicationContext启动。还有一个 spring.jpa.generate-ddl标志,但如果 Hibernate 自动配置处于活动状态,则不会使用它,因为ddl-auto设置更细粒度。

由于spring.jpa.hibernate.ddl-auto如果使用 Hibernate,则默认设置该属性,因此如果使用 Hibernate,spring.jpa.generate-ddl则忽略该标志(至少对于 H2 内存数据库)


推荐阅读