带有H2和data.sql的SpringBootDataJPA-找不到表

我有一个 Spring Boot 2.5.0 项目。我正在将 spring-data-jap 与 h2 内存数据库一起使用。我想在启动时用 data.sql 文件填充数据,但我得到一个表未找到异常。如果我删除 data.sql 文件,我可以看到我的实体的表会自动创建。但是,如果我包含 data.sql 文件,则会收到错误消息,指出该表不存在。也许这是我错误配置 h2 数据库的 sql 语法错误?

应用程序.yml

spring:
  datasource:
    url: jdbc:h2:mem:test
    driverClassName: org.h2.Driver
    username: sa
    password: sa
  jpa:
    database-platform: org.hibernate.dialect.H2Dialect

debug: true  

数据.sql

INSERT INTO BUSINESS_SUMMARY VALUES (1, "ALM470", "B48", 3);

BusinessSummary.java 实体

@NoArgsConstructor(access = AccessLevel.PROTECTED)
@Getter
@Entity
public class BusinessSummary {

    @Id
    private Long id;
    private String businessId;
    private String businessDomainId;
    private Integer cityCode;
}

BusinessSummaryRepository.java

@Repository
public interface BusinessSummaryRepository extends JpaRepository<BusinessSummary, Long> {
}

例外:

Caused by: org.h2.jdbc.JdbcSQLSyntaxErrorException: Table "BUSINESS_SUMMARY" not found; SQL statement:
INSERT INTO BUSINESS_SUMMARY VALUES(1, "ALM470", "B48", 3) [42102-200]

回答

spring.jpa.defer-datasource-initialization=true

默认情况下,data.sql 脚本现在在初始化 Hibernate 之前运行。这使基于脚本的基本初始化的行为与 Flyway 和 Liquibase 的行为保持一致。

如果要使用 data.sql 填充由 Hibernate 创建的模式,请将
spring.jpa.defer-datasource-initialization 设置为 true。虽然不建议混合使用数据库初始化技术,但这也将允许您使用 schema.sql 脚本在通过 data.sql 填充 Hibernate 创建的架构之前构建它。

您必须将 spring.jpa.defer-datasource-initialization 转换为 yml。


以上是带有H2和data.sql的SpringBootDataJPA-找不到表的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>