Генерация имен в верхнем регистре таблиц с использованием Spring JPA для Postgres - PullRequest
0 голосов
/ 29 мая 2018

Я пытаюсь получить записи из postgres, используя Spring Jpa.Все таблицы и столбцы в Postgres находятся в верхнем регистре, но Spring jpa генерирует запросы в нижнем регистре, хотя я упомянул имя таблицы в верхнем регистре в классе сущностей.Я просмотрел множество публикаций по stackoverflow по этой схожей проблеме, и все предлагают добавить стратегию именования в файл yaml, что я и сделал, но имя таблицы по-прежнему генерируется строчными буквами.Я использовал приведенные ниже стратегии (каждая за раз, но у меня ничего не получалось).Я что-то пропустил?

spring.jpa.properties.hibernate.naming.physical-strategy: org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
spring.jpa.properties.hibernate.naming_strategy: org.hibernate.cfg.EJB3NamingStrategy
spring.jpa.properties.hibernate.naming.implicit-strategy: org.hibernate.boot.model.naming.ImplicitNamingStrategyLegacyJpaImpl
Caused by: **org.postgresql.util.PSQLException: ERROR: relation "**table_name**" does not exist**
  Position: 258
        at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2455)
        at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:2155)
        at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:288)
        at org.postgresql.jdbc.PgStatement.executeInternal(PgStatement.java:430)
        at org.postgresql.jdbc.PgStatement.execute(PgStatement.java:356)
        at org.postgresql.jdbc.PgPreparedStatement.executeWithFlags(PgPreparedStatement.java:168)
        at org.postgresql.jdbc.PgPreparedStatement.executeQuery(PgPreparedStatement.java:116)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at org.apache.tomcat.jdbc.pool.StatementFacade$StatementProxy.invoke(StatementFacade.java:114)
        at com.sun.proxy.$Proxy201.executeQuery(Unknown Source)
        at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.extract(ResultSetReturnImpl.java:60)
        ... 179 common frames omitted

Вот свойства, которые я добавил в свой файл yaml:

spring.jpa.properties.database-platform: org.hibernate.dialect.PostgreSQLDialect
spring.jpa.properties.hibernate.id.new_generator_mappings: true
spring.jpa.properties.hibernate.cache.use_second_level_cache: true
spring.jpa.properties.hibernate.cache.use_query_cache: false
spring.jpa.properties.hibernate.generate_statistics: true
spring.jpa.properties.hibernate.cache.region.factory_class: io.github.jhipster.config.jcache.NoDefaultJCacheRegionFactory
spring.jpa.properties.hibernate.naming-strategy: org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl

        #hibernate.naming_strategy: org.hibernate.cfg.EJB3NamingStrategy
        #hibernate.naming.implicit-strategy: org.hibernate.boot.model.naming.ImplicitNamingStrategyLegacyJpaImpl
        #hibernate.dialect: org.hibernate.dialect.PostgreSQLDialect

1 Ответ

0 голосов
/ 30 мая 2018

Я воспроизвел то, что вам нужно, таким образом:

CREATE TABLE temp."SOME_UPPERCASE_TABLE" (
  dt      TIMESTAMP NOT NULL DEFAULT now(),
  column1 VARCHAR(10) PRIMARY KEY
);

Сущность:

@Entity
@Table(name = "SOME_UPPERCASE_TABLE", schema = "tmp", catalog = "cram")
public class SomeUppercaseTableEntity {
    private Timestamp dt;
    private String column1;
    // getters, setters...

Все работает хорошо.

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