2

我的 Spring 应用程序必须从一个名为 MY_DOMAIN_OBJECT 的表中读取,该表属于 MY_CUSTOM_SCHEMA 模式,请注意默认模式中也存在同一个表。

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

知道我在这里做错了什么吗?

在相关类下面:

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,我怀疑这是导致问题的原因。

4

1 回答 1

0

哦,对不起,我应该早点看到那样的。

不要覆盖getQualifiedTableName默认实现表和模式名称的组合。

于 2019-09-08T15:54:28.297 回答