【发布时间】:2020-07-07 01:53:47
【问题描述】:
我在 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 returning an empty ResultSet for synonyms
我试图用谷歌搜索,但我什么也没找到......
编辑:
基于 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]
只是为了测试,当我用 view 替换同义词时它很好。另外,当我关闭验证时,它很好。我的意思是功能有效。
编辑 3
注意connection-properties 与datasource-properties 的同义词验证需要更长的时间(至少对我而言)。
【问题讨论】:
-
它抱怨缺少列,因此您的列名与实体中的属性/字段/映射信息不匹配。
-
我做了调试hibernate没有检索同义词的列信息,这是
missing column错误的根本原因。 -
嗯,这些设置中的任何一个都会随着您的错误发生变化。你确定你使用的是tomcat连接池吗?您使用的是哪个 Spring BOot 版本?此外,
hibernate.synonyms和hibernate: synonyms:与 Spring Boot 按原样使用来自spring.jpa.properties的属性不同。它不解析它下面的 YAML(这已经并且可能会成为混淆的根源)。属性按原样使用。 -
不,我不是 100% 确定使用了 tomcat 连接池。我在日志中看到
HikariPool-1 - Start completed.是相同还是不同?还有Running with Spring Boot v2.1.4.RELEASE, Spring v5.1.6.RELEASE -
请将其添加到您的问题中。那么显然在tomcat连接池上设置属性几乎没有用。而是使用
spring.datasource.hikari命名空间。
标签: oracle hibernate spring-boot