【发布时间】:2021-04-14 16:48:10
【问题描述】:
用例:连接 MySQL 和 oracle 数据库
问题:如果我将任何一个数据源注释为主要数据源,它总是使用主要数据库标识符处理并基于此形成查询。
MySQL
@Bean
@Primary
@Qualifier("mySqlJdbcConverter")
public JdbcConverter mySqlJdbcConverter(JdbcMappingContext mappingContext, @Lazy RelationResolver relationResolver,
@Qualifier("mysqlJdbcOperationsReference") NamedParameterJdbcOperations mysqlJdbcOperationsReference) {
DefaultJdbcTypeFactory jdbcTypeFactory = new DefaultJdbcTypeFactory(
mysqlJdbcOperationsReference.getJdbcOperations());
return new BasicJdbcConverter(mappingContext, relationResolver, mySqlJdbcCustomConversions(), jdbcTypeFactory,
IdentifierProcessing.create(new Quoting("`"), LetterCasing.UPPER_CASE));
}
@Bean
@Primary
@Qualifier("mySqlJdbcDialect")
public Dialect mySqlJdbcDialect(final JdbcConverter JdbcConverter) {
return MySqlDialect.INSTANCE;
}
甲骨文
@Bean
@Qualifier("oracleJdbcConverter")
public JdbcConverter oracleJdbcConverter(JdbcMappingContext mappingContext, @Lazy RelationResolver relationResolver,
@Qualifier("oracleJdbcOperationsReference") NamedParameterJdbcOperations oracleJdbcOperationsReference) {
DefaultJdbcTypeFactory jdbcTypeFactory = new DefaultJdbcTypeFactory(
oracleJdbcOperationsReference.getJdbcOperations());
return new BasicJdbcConverter(mappingContext, relationResolver, oracleJdbcCustomConversions(), jdbcTypeFactory,
IdentifierProcessing.create(new Quoting("\""), LetterCasing.UPPER_CASE));
}
@Bean
@Qualifier("oracleJdbcDialect")
@RequestScope
public Dialect oracleJdbcDialect(final JdbcMappingContext JdbcConverter) {
return OracleDialect.INSTANCE;
}
在上述情况下,查询总是带有反引号字符。虽然是连接oracle数据库,但是标识符总是反引号
查询:
SELECT `service`.`SERVICE_ID` AS `SERVICE_ID`, `service`.`SERVICE_NAME` AS `SERVICE_NAME` FROM `service`
我可以知道为什么会这样吗?
【问题讨论】:
标签: spring oracle11g spring-data-jdbc dialect