如何设置连接属性(包括同义词)



我在Spring Boot中的DB配置是使用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

我试着在谷歌上搜索,但一无所获。。。

编辑:

基于M.Deinum答案的附加测试:

我坚信,

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

但是我得到了相同的错误

架构验证:缺少列

当我完全删除时

spring:
jpa:
properties:
hibernate:
synonyms: true

我得到

架构验证:缺少表

编辑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]

只是为了测试,当我用视图替换同义词时,这很好。此外,当我关闭验证时,它也很好。我的意思是功能是有效的。

编辑3

注意connection-propertiesdatasource-properties,对于同义词,验证需要更长的时间(至少对我来说(。

设置hibernate.connection属性是无用的。您应该在数据源上设置它们。要设置其他非默认属性,可以在spring.datasource.tomcat上使用connection-properties属性。

EDIT:您使用的不是Tomcat连接池,而是默认的HikariCP。因此,设置tomcat属性几乎毫无用处。

在属性中添加以下内容

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

或yaml

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

您也可以设置相应的hibernate属性,但不是像您那样。您需要通过spring.jpa.properties进行设置。这是因为synonyms没有作为Spring Boot使用的properties对象上的属性公开。因此,您需要将其设置为一个附加属性。

注意在本节中使用完整的属性名称hibernate.synonyms非常重要,不要将其格式化为YAML,因为这不起作用!。

spring:
jpa:
properties:
hibernate.synonyms: true

EDIT(1(:由于使用的池是Hikari,而不是Tomcatc,因此更改为Hikari命名空间和属性。

最新更新