gpt4 book ai didi

spring-boot - Spring Data JDBC 使用 Boot 2.3.0 生成错误的 HSQLDB 查询

转载 作者:行者123 更新时间:2023-12-05 02:54:08 24 4
gpt4 key购买 nike

我有一个使用 Spring Data JDBC 的 Spring Boot 项目。测试使用 HSQLDB。当我尝试升级到 Spring Boot 2.3.0 时,我的存储库测试开始失败。

Spring Data JDBC 似乎现在引用表名和列名。 Spring Boot 2.2.7 中包含的 Spring Data JDBC 版本没有。

项目位于 https://github.com/mrgrew/boot230bug证明了差异。 Spring Boot 2.3.0 生成失败的 INSERT INTO "stats.counter"("COUNTER_NAME") VALUES (?)。 Spring Boot 2.2.7 生成成功的 INSERT INTO stats.counter (counter_name) VALUES (?)

我猜 Spring Data JDBC 没有正确识别方言。我的测试属性指定 spring.datasource.platform=hsqldb 我认为这可以避免歧义。

看起来像是 Spring Boot 2.3.0 中包含的 Spring Data JDBC 版本的错误。任何人都可以确认这是一个错误或对我的与 Boot 2.3.0 一起使用的演示项目提出更改建议吗?

提前感谢您的任何建议或讨论!

最佳答案

看来我问得太快了……在我问这个问题的同一天发布了一份迁移指南! https://spring.io/blog/2020/05/20/migrating-to-spring-data-jdbc-2-0

迁移指南解释了我观察到的内容:

Quoting of Identifiers

Spring Data JDBC 1.x uses table and column names mostly without changing them. This causes problems when you use an SQL key word as a property or entity name or when you tried to use some special character in a column name.

For this reason Spring Data JDBC 2.0 quotes all identifiers by default. This makes the names case-sensitive, at least for most databases. Since we also, by default, convert the names generated into the default letter casing used by the database, this should not cause any problems, assuming you used no quotes in the CREATE TABLE statements, as most people do.

从 Liquibase 更改日志中删除 @Table 注释和 schemaName 消除了我对引号的意外使用并解决了这个问题。作为奖励,我不再需要创建模式,所以我可以删除 spring.datasource.platform=hsqldb 和 schema-hsqldb.sql 文件。查看fixed工作版本的分支。

感谢您的插入 Jens Schauder !

关于spring-boot - Spring Data JDBC 使用 Boot 2.3.0 生成错误的 HSQLDB 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61917022/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com