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