【问题标题】:Problems with integration tests after upgrading H2 database from 1.4.200 to 2.0.204将 H2 数据库从 1.4.200 升级到 2.0.204 后的集成测试问题
【发布时间】:2022-01-05 11:52:22
【问题描述】:

最近我将SpringBoot 2.5.8项目中的H2数据库从版本1.4.200升级到2.0.204。它仅用于测试目的。对于生产,我们使用PostgreSQL 12.9。 似乎升级后某些词成为H2数据库中的关键字,例如:dayvalue。调用集成测试后,HibernateDDL 部分失败。

这种情况的最佳解决方案是什么?

  1. 查看所有实体并在保留的列名称周围应用反引号:
    @NotNull
    @Column(name = "day", nullable = false)
    private LocalDate day;
    @NotNull
    @Column(name = "`day`", nullable = false)
    private LocalDate day;
  1. 提供专用的SpringPhysicalNamingStrategy 和覆盖toPhysicalColumnName 方法仅用于集成测试目的。检查H2数据库中的保留关键字列表并引用它们。
# Datasource related properties
spring.datasource.driver-class-name=org.h2.Driver
spring.datasource.url=jdbc:h2:mem:db;DB_CLOSE_DELAY=-1
spring.datasource.username=sa
spring.datasource.password=sa
spring.sql.init.mode=always
spring.sql.init.continue-on-error=true
spring.sql.init.platform=h2
spring.jpa.show-sql=true
spring.jpa.generate-ddl=true
spring.jpa.hibernate.ddl-auto=update
spring.jpa.properties.hibernate.jdbc.time_zone=UTC
spring.jpa.hibernate.naming.physical-strategy=[project-related-package-name-here].strategy.CustomH2NamingStrategy
spring.jpa.defer-datasource-initialization=true

我认为第一个解决方案应该适用于 PostgreSQLH2 数据库。尽管day 标识符在PostgreSQL 12.9 中是非保留的,但它可能在未来的版本中。 第二个应该解决H2数据库的问题。

你怎么看?也许这种情况有更好的解决方案?或者也许从SQL:​2016 标准中获取保留关键字列表,并通过自定义SpringPhysicalNamingStrategy 将它们应用于两个数据库?

【问题讨论】:

  • 选项 3,使用测试容器并使用 PostgreSQL 进行测试。该 H2 版本中有更多重大更改,您升级是否有特定原因?

标签: spring-boot hibernate h2


【解决方案1】:

在 H2 2.0 中,您可以通过将 ;NON_KEYWORDS=DAY,VALUE 附加到 JDBC URL 来使用 SET NON_KEYWORDS 设置,但通常的解决方案是使用 spring.jpa.properties.hibernate.globally_quoted_identifiers=true 无条件地引用生成的 SQL 中的所有标识符。

当您尝试使用它而不是 PostgreSQL 时,通常还应该在 H2 的 JDBC URL 中包含 ;MODE=PostgreSQL;DATABASE_TO_LOWER=TRUE;DEFAULT_NULL_ORDERING=HIGH。但是在生产和测试中使用不同的 DBMS 是个坏主意,而且 Hibernate ORM 还不完全支持 H2 2.0。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-04
    • 1970-01-01
    • 2021-05-15
    • 1970-01-01
    • 2017-05-14
    • 2020-09-13
    相关资源
    最近更新 更多