Mar*_*nek 3 hibernate h2 spring-boot
最近我将项目H2中的数据库SpringBoot 2.5.8从版本升级1.4.200到2.0.204. 它仅用于测试目的。对于生产,我们使用PostgreSQL 12.9。\n似乎在升级后,一些单词成为H2数据库中的关键字,例如:day, value。调用集成测试后部分Hibernate失败DDL。
对于这种情况,最好的解决方案是什么?
\n @NotNull\n @Column(name = "day", nullable = false)\n private LocalDate day;\nRun Code Online (Sandbox Code Playgroud)\n @NotNull\n @Column(name = "`day`", nullable = false)\n private LocalDate day;\nRun Code Online (Sandbox Code Playgroud)\nSpringPhysicalNamingStrategy和覆盖方法。toPhysicalColumnName检查保留关键字列表H2并引用它们。# Datasource related properties\nspring.datasource.driver-class-name=org.h2.Driver\nspring.datasource.url=jdbc:h2:mem:db;DB_CLOSE_DELAY=-1\nspring.datasource.username=sa\nspring.datasource.password=sa\nspring.sql.init.mode=always\nspring.sql.init.continue-on-error=true\nspring.sql.init.platform=h2\nspring.jpa.show-sql=true\nspring.jpa.generate-ddl=true\nspring.jpa.hibernate.ddl-auto=update\nspring.jpa.properties.hibernate.jdbc.time_zone=UTC\nspring.jpa.hibernate.naming.physical-strategy=[project-related-package-name-here].strategy.CustomH2NamingStrategy\nspring.jpa.defer-datasource-initialization=true\nRun Code Online (Sandbox Code Playgroud)\n我认为第一个解决方案应该适用于PostgreSQL数据库H2。尽管day标识符是非保留的,但PostgreSQL 12.9在未来的版本中可能会出现。\n第二个应该解决数据库问题H2。
你对此有何看法?也许对于这种情况有更好的解决方案?或者也许可以从标准中获取保留关键字列表SQL:\xe2\x80\x8b2016并通过自定义将它们应用到两个数据库SpringPhysicalNamingStrategy?
Evg*_*nov 10
在 H2 2.0 中,您可以通过附加到 JDBC URL 来使用SET NON_KEYWORDS;NON_KEYWORDS=DAY,VALUE设置,但正常的解决方案是无条件引用生成的 SQL 中的所有标识符spring.jpa.properties.hibernate.globally_quoted_identifiers=true,例如。
;MODE=PostgreSQL;DATABASE_TO_LOWER=TRUE;DEFAULT_NULL_ORDERING=HIGH当您尝试使用 H2 而不是 PostgreSQL 时,通常还应该在 JDBC URL 中包含H2。但使用不同的 DBMS 进行生产和测试并不是一个好主意,而且 Hibernate ORM 尚未完全支持 H2 2.0。编辑:Hibernate ORM 5.6.5.Final 具有对 H2 2.*.* 的基本支持,并且在较新的版本中修复了一些其他问题。
| 归档时间: |
|
| 查看次数: |
8333 次 |
| 最近记录: |