春データJPAでは、使用して、特定のテーブルにエンティティをマッピングすることができ@Table
、我々は、スキーマと名前を指定することができます注釈を。
しかし、春データJDBCを使用するNamingStrategy
エンティティクラス名を変換することによって、テーブル名にエンティティをマッピングします。私たちは、名前のエンティティクラスを持っている場合たとえば、MetricValue
その後、テーブルは名前を付ける必要がありmetricvalue
、デフォルトのスキーマに。しかし、私はマップする必要がMetricValue
にmetric_value
してテーブルapp
のスキーマ。
注釈や他のことで、このマッピングを上書きする方法はありますか?
命名の振る舞いは、インターフェースのデフォルトの実装で定義されています NamingStrategy
以下からのリファレンスドキュメント、バージョン1.0.2のセクション4.4.3:
あなたは春データJDBCが提供するCrudRepositoryの標準実装を使用すると、彼らは、特定のテーブル構造を期待しています。あなたは、あなたのアプリケーションのコンテキストでNamingStrategyをを提供することにより、それを微調整することができます。
デフォルトの実装では、持っている(javadocのバージョン1.0.2から)次の動作を:
両方の名前部分とRelationalPersistentPropertyに基づいたクラスに基づいて、スキーマ、テーブル名と列名のデフォルトは「_」によって分離されました。
だから、実装がBeanの作成NamingStrategy
でアプリケーションのコンテキストに登録します。
これは@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";
}
};
}
}