Hibernate + Postgres таблица и имя столбца чувствительная проблема - PullRequest
0 голосов
/ 27 января 2019

Я использую 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;
.....
}

И таблица базы данных имеет столбец, как показано ниже (смешанный регистр): -

enter image description here

Когда я выбираю все данные, используя метод репозитория 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, чтобы сделать имя таблицы и столбца нечувствительным?Любое предложение, чтобы решить эту проблему?

1 Ответ

0 голосов
/ 22 февраля 2019

Попробуйте внести изменения в application.properties, как показано ниже:

spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.PostgreSQL95Dialect
spring.jpa.hibernate.naming.implicit-strategy=org.hibernate.boot.model.naming.ImplicitNamingStrategyLegacyJpaImpl
spring.jpa.hibernate.naming.physical-strategy= org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
spring.jpa.properties.hibernate.globally_quoted_identifiers=true

Кстати, в @Table также добавьте схему.т.е., @Table(name="table", schema="schemaname") Кроме того, In @Column (name = "xx") не требуется.

Это работало для меня с Postgresql 10, Hibernate 5.x и Spring Boot 2.1.x

удачи

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...