Как установить свойства соединения (includeSynonyms) - PullRequest
0 голосов
/ 26 марта 2020

Моя конфигурация БД в Spring Boot выполняется с использованием файла yaml:

# Common
spring:
  jpa:
    properties:
      hibernate:
        show_sql: true
        use_sql_comments: truecat
        format_sql: false
        ddl-auto: validate
        synonyms: true
        connection:
          includeSynonyms: true
#        CONNECTION_PROPERTY_INCLUDE_SYNONYMS_DEFAULT: 'true'
    database: ORACLE
  datasource:
    tomcat:
      max-active: 10
      max-idle: 10

# template only
---
spring:
  profiles: dev
  datasource:
    url: jdbc:oracle:thin:@//localhost:1521/DEV
    username: DEV
    password: ...

Изначально я сталкивался с

Проверка схемы: отсутствует таблица

Итак, я добавил hibernate.synonyms=true, теперь я получаю

Проверка схемы: отсутствует столбец

Чтобы решить, что мне нужно изменить соединение следующим образом https://gist.github.com/uggds/c3f0fa71037bc5177f60

Могу ли я сделать это в конфигурации?

То, что я пробовал и не работало

hibernate.connection.CONNECTION_PROPERTY_INCLUDE_SYNONYMS_DEFAULT: true
hibernate.connection.includeSynonyms: true

Похожие: DatabaseMetaData.getColumns, возвращающая пустой ResultSet для синонимов

Я пытался за это погуглить, но ничего не нашел ...

edit:

Дополнительный тест, основанный на ответе М. Дейна:

Я твердо верю, что

spring:
  jpa:
    properties:
      hibernate.synonyms: true

и

spring:
  jpa:
    properties:
      hibernate:
        synonyms: true

одинаковы, по крайней мере, он имел тот же эффект, когда я использовал один или другой (оба результата Schema-validation: missing column

я добавил

  datasource:
    tomcat:
      max-active: 10
      max-idle: 10
      connection-properties:
        includeSynonyms: true

, но я получаю ту же ошибку

Проверка схемы: миссин столбец g

Когда я полностью удалил

spring:
  jpa:
    properties:
      hibernate:
        synonyms: true

Я получаю

Проверка схемы: отсутствует таблица

edit 2:

Попытка настройки свойств в пуле соединений hikari

spring:
  jpa:
    properties:
      hibernate:
        show_sql: true
        use_sql_comments: true
        format_sql: false
        ddl-auto: validate
        synonyms: true
    database: ORACLE
  datasource:
    hikari:
      connection-properties:
        includeSynonyms: true

Я все еще получаю:

отсутствует столбец [zone_definitionpk_id]

Просто для проверки, когда я заменяю синоним на view, все в порядке. Также, когда я отключаю проверку, это нормально. Я имею в виду, что функционал работает.

edit 3

Позаботьтесь о connection-properties против datasource-properties, и с синонимами проверка длится дольше (по крайней мере для меня) .

1 Ответ

1 голос
/ 26 марта 2020

Установка свойств hibernate.connection бесполезна. Вместо этого вы должны установить их в источнике данных. Чтобы установить дополнительные свойства не по умолчанию, вы можете использовать свойство connection-properties для spring.datasource.tomcat.

РЕДАКТИРОВАТЬ: Вы используете не пул соединений Tomcat, а HikariCP по умолчанию. Поэтому установка свойств tomcat в значительной степени бесполезна.

Добавление следующего в ваши свойства

spring.datasoure.hikari.datasource-properties.includeSynonyms=true

или yaml

spring:
  datasource:
    hikari:
      datasource-properties:
        includeSynonyms: true

Вы также можете установить соответствующее свойство гибернации, Однако не так, как вы. Вам нужно установить его через spring.jpa.properties. Это связано с тем, что synonyms не отображается как свойство объекта свойств, используемого Spring Boot. Следовательно, вам нужно установить его как дополнительное свойство.

ПРИМЕЧАНИЕ важно использовать полное имя свойства hibernate.synonyms в этом разделе, не форматировать его как YAML, поскольку это не будет работать !.

spring:
  jpa:
    properties:
      hibernate.synonyms: true

РЕДАКТИРОВАТЬ (1): В качестве пула используется Hikari, а не Tomcat c изменено на пространство имен и свойства Hikari.

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