Субъект Spring Data JDBC:
Код: Выделить всё
package some.app;
import org.springframework.data.annotation.Id;
import org.springframework.data.relational.core.mapping.Table;
@Table(value = "address")
public record Address(
@Id Integer persistenceId,
String name,
String street,
String postCode,
String city,
String countryCode) {}
Код: Выделить всё
Код: Выделить всё
spring:
datasource:
url: jdbc:h2:mem:test;database_to_lower=true;case_insensitive_identifiers=true
driver-class-name: org.h2.Driver
username: sa
password:
Код: Выделить всё
org.springframework.jdbc.BadSqlGrammarException: PreparedStatementCallback; bad SQL grammar
[SELECT "address"."CITY" AS "CITY",
"address"."NAME" AS "NAME",
"address"."STREET" AS "STREET",
"address"."POST_CODE" AS "POST_CODE",
"address"."COUNTRY_CODE" AS "COUNTRY_CODE",
"address"."PERSISTENCE_ID" AS "PERSISTENCE_ID"
FROM "address"
WHERE "address"."PERSISTENCE_ID" = ?]
Чтобы сузить проблему, я внедрил DataSource в класс интеграционного теста, в котором контекст Spring Data JDBC запущен для H2 (с аннотацией @DataJdbcTest) и запрошен для всех имен таблиц и столбцов, используя
Код: Выделить всё
select * from INFORMATION_SCHEMA.COLUMNS where TABLE_SCHEMA = 'PUBLIC'
Единственное обходное решение, которое я нашел до сих пор, — это явно указывать имя каждого отдельного столбца в нижнем регистре:
Код: Выделить всё
package net.contargo.adapter.pws2cola.config;
import org.springframework.data.annotation.Id;
import org.springframework.data.relational.core.mapping.Column;
import org.springframework.data.relational.core.mapping.Table;
@Table(value = "address")
public record Address(
@Id @Column("persistence_id") Integer persistenceId,
@Column("name") String name,
@Column("street") String street,
@Column("post_code") String postCode,
@Column("city") String city,
@Column("country_code") String countryCode) {}
Подробнее здесь: https://stackoverflow.com/questions/798 ... 2-database
Мобильная версия