Я использую Spring Boot 2.1 + Hibernate 5.x + Postgres 11.x Строка подключения к моей базе данных: -
url: jdbc: postgresql: // localhost: 5432 / mydatabase? CurrentSchema = dbo
База данных Postgres имеет смешанное имя таблицы регистра и имя столбца.У меня есть Hibernate класс, как показано ниже (у которого все имена таблиц и столбцов в нижнем регистре): -
@Entity
@Table(name = "products")
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
public class Products implements Serializable {
...
@Size(max = 80)
@Column(name = "barcode", length = 80)
private String barcode;
@NotNull
@Size(max = 80)
@Column(name = "name", length = 80, nullable = false)
private String name;
@Column(name = "hidden")
private Boolean hidden = false;
.....
}
И таблица базы данных имеет столбец, как показано ниже (смешанный регистр): -
Когда я выбираю все данные, используя метод репозитория JPA, hibernate генерирует запрос ниже.
select products0_.id as id1_140_, products0_.barcode as barcode2_140_,
products0_.creation_time as creation3_140_, products0_.hidden as hidden4_140_,
from dbo.products products0_ limit 10
, что вызывает ошибку, как показано ниже: -
Caused by: org.postgresql.util.PSQLException: ERROR: relation "products" does not exist
Position: 449
at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2440)
Даже если я использую имя таблицы, как показано ниже: -
@Table(name = "Products")
// такое же имя, как у меня в базе данных
Я получаю ту же ошибку, потому что postgres нужноцитируйте смешанное имя случая, и добавление этого изменения в каждый класс - большая боль.
, если я использую имя, как показано ниже, это будет работать: -
@Table(name = "\"Products\"")
, но это очень болезненное решение, и это сделает мой код зависимым только от базы данных postgres.
есть ли какие-либо настройки в спящем режиме или в postgres, чтобы сделать имя таблицы и столбца нечувствительным?Любое предложение, чтобы решить эту проблему?