Spring数据jdbc标识符处理

Spring数据jdbc标识符处理,spring,oracle11g,spring-data-jdbc,dialect,Spring,Oracle11g,Spring Data Jdbc,Dialect,用例:连接MySQL和oracle数据库 问题:如果我将任何一个数据源注释为主数据源,它总是使用主数据库标识符处理并基于此形成查询 MySQL @Bean @初级的 @限定符(“mysqljdbconverter”) 公共JdbcConverter mySqlJdbcConverter(JdbcMappingContext mappingContext,@Lazy RelationResolver RelationResolver, @限定符(“mysqlJdbcOperationsRefere

用例:连接MySQL和oracle数据库

问题:如果我将任何一个数据源注释为主数据源,它总是使用主数据库标识符处理并基于此形成查询

MySQL

@Bean
@初级的
@限定符(“mysqljdbconverter”)
公共JdbcConverter mySqlJdbcConverter(JdbcMappingContext mappingContext,@Lazy RelationResolver RelationResolver,
@限定符(“mysqlJdbcOperationsReference”)名称参数jdbcOperations(mysqlJdbcOperationsReference){
DefaultJdbcTypeFactory jdbcTypeFactory=新的DefaultJdbcTypeFactory(
mysqlJdbcOperationsReference.getJdbcOperations());
返回新的BasicJdbcConverter(mappingContext、relationResolver、mySqlJdbcCustomConversions()、jdbcTypeFactory、,
IdentifierProcessing.create(新引号(“`”),大写字母);
}
@豆子
@初级的
@限定符(“mysqljdbc方言”)
公共方言MySQLJDBCdialent(最终JdbcConverter JdbcConverter){
返回mysqldialent.INSTANCE;
}
Oracle

@Bean
@限定符(“oracleJdbcConverter”)
公共JdbcConverter oracleJdbcConverter(JdbcMappingContext mappingContext,@Lazy RelationResolver RelationResolver,
@限定符(“oracleJdbcOperationsReference”)命名参数(OracleJDBCOperations oracleJdbcOperationsReference){
DefaultJdbcTypeFactory jdbcTypeFactory=新的DefaultJdbcTypeFactory(
oracleJdbcOperationsReference.getJdbcOperations());
返回新的BasicJdbcConverter(映射上下文、关系解析器、oracleJdbcCustomConversions()、jdbcTypeFactory、,
IdentifierProcessing.create(新引号(\”),大写字母);
}
@豆子
@限定词(“oraclejdbc方言”)
@请求范围
公共方言OracleJDBCdialent(最终JdbcMappingContext JdbcConverter){
返回OracleDialogue.INSTANCE;
}
在上述情况下,always query带有反引号字符。即使它连接到oracle数据库,但标识符始终是反引号

查询:

从“服务”中选择“服务”.“服务ID”作为“服务ID”.“服务”.“服务名称”作为“服务名称”`

我可以知道发生的原因吗?

方言不是从
应用程序上下文
中作为bean提取的。如果您想使用自己的
方言
,您需要执行以下操作:

  • 实现您自己的
    方言
  • 实现一个
    jdbc方言提供程序
    返回该
    方言
  • 在类路径的
    META-INF
    文件夹中放置一个文件spring.factories,然后添加行
    org.springframework.data.jdbc.repository.config.diallarResolver$jdbcDiallarProvider=

  • 但实际上你不应该这样做,因为Oracle和MySql的方言已经开箱即用了。

    我想我没有清楚地解释我的问题。如上所述,我正在将数据从Oracle传输到MySql。我已经为每个数据库定义了数据源、方言bean。此外,我还为这些数据库添加了@EnableJdbcRepositories注释使用正确的参数初始化。当请求到来时,它会选择正确的连接并尝试执行查询。因为我已经将MySQL注释为主,所以它总是使用MySQL方言的标识符处理。因为oracle查询总是有反引号字符(反引号是MySQL DB的默认值),这就产生了问题。