无法让自定义 NamingStrategy 工作

unable to get custom NamingStrategy working

我的 Spring 应用程序必须从属于 MY_CUSTOM_SCHEMA 架构的名为 MY_DOMAIN_OBJECT 的 table 中读取,请注意相同的 table 存在于默认模式也是如此。

我正在使用 spring-data-jdbc 但我无法从正确的架构中读取数据。 我正在创建一个带有某些方法覆盖的自定义 NamingStrategy bean 但没有成功,结果是我从默认模式中的 table 获得结果。

知道我做错了什么吗?

以下相关类:

AppConfig.java

@Configuration
@EnableJdbcRepositories(basePackages = "my.package.for.persistence")
public class AppConfig extends JdbcConfiguration {

    @Bean(name = "sourceDS", destroyMethod = "")
    public DataSource sourceDatasource() {
        JndiDataSourceLookup dataSourceLookup = new JndiDataSourceLookup();
        return dataSourceLookup.getDataSource("jdbc/OracleDS");
    }

    @Bean
    public NamedParameterJdbcOperations operations() {
        return new NamedParameterJdbcTemplate(sourceDatasource());
    }

    @Bean
    //@Primary
    public NamingStrategy namingStrategy() {
        return new NamingStrategy() {

            @Override
            public String getTableName(Class<?> type) {
                return type.isAnnotationPresent(Table.class) ?
                        type.getAnnotation(Table.class).value() : NamingStrategy.super.getTableName(type);
            }

            @Override
            public String getQualifiedTableName(Class<?> type) {
                return type.isAnnotationPresent(Table.class) ?
                        type.getAnnotation(Table.class).value() : NamingStrategy.super.getTableName(type);
            }

            @Override
            public String getSchema() {
                return "my_custom_schema";
            }


        };
    }
}

MyDomainObject.java

package my.package.for.persistence;

@Data
@AllArgsConstructor
@Table("MY_DOMAIN_OBJECT")
public class MyDomainObject{

    @Id
    private Long id;

    //other fields
}

MyRepository.java

package my.package.for.persistence;

public interface MyRepository extends Repository<MyDomainObject, Long> {

    Stream<MyDomainObject> findAll();
}

更新:我忘了说我正在使用 spring-boot-starter-data-jdbc,我怀疑这是导致问题的原因。

哦抱歉,我应该早点看到的。

不要覆盖 getQualifiedTableName 默认实现会合并 table 和架构名称。