Na Primavera de dados JPA podemos mapear uma entidade a uma tabela específica usando @Table
anotação onde podemos especificar esquema e nome.
Mas Primavera de dados JDBC usa um NamingStrategy
para mapear uma entidade para um nome de tabela, convertendo o nome da classe entidades. Por exemplo, se temos a classe entidade nomeada MetricValue
, em seguida, a tabela deve ser nomeado metricvalue
no esquema padrão. Mas eu preciso mapear MetricValue
a metric_value
tabela no app
esquema.
Existe alguma maneira de substituir este mapeamento, anotação ou qualquer outro?
O comportamento de nomeação é definida pela implementação padrão da interface NamingStrategy
De documentação de referência, seção 4.4.3 de versão 1.0.2 :
Quando você usa as implementações padrão de CrudRepository que a Primavera de dados JDBC fornece, eles esperam uma certa estrutura da tabela. Você pode ajustar isso, fornecendo um NamingStrategy em seu contexto de aplicação.
A implementação padrão tem o seguinte comportamento (de javadoc versão 1.0.2) :
O padrão é de nenhum esquema, nome de tabela baseado em classes e nome da coluna com base em RelationalPersistentProperty com partes do nome de ambos separados por '_'.
Portanto, criar um bean que implementa NamingStrategy
em registrá-lo em seu contexto de aplicação.
Este é um exemplo de comentário @keddok:
@Configuration
@EnableJdbcRepositories
public class MetricStoreRepositoryConfig extends JdbcConfiguration {
@Autowired
private DataSource dataSource;
@Bean
NamedParameterJdbcOperations operations() {
return new NamedParameterJdbcTemplate(dataSource);
}
@Bean
PlatformTransactionManager transactionManager() {
return new DataSourceTransactionManager(dataSource);
}
@Bean
NamingStrategy namingStrategy() {
return new NamingStrategy() {
@Override
public String getSchema() {
return "metric";
}
};
}
}