3 回答
TA贡献1770条经验 获得超3个赞
Spring Data JDBC 有它自己的@Table注解,也是一个注解@Column。
您只需将注释添加到您的实体并将名称指定为注释的值。
举一些例子:
@Table("entity")
class MyEntity {
private @Column("last_name") String name;
@Column(value = "entity_id", keyColumn = "entity_index")
private List<SomeOtherEntity> someList;
}
这将读取和写入MyEntity表entity而不是默认的my_entity. 该属性name将存储在列中last_name。并且从some_other_entityto反向引用的列entity将entity_id以外键列命名,通常是entity(被引用表的表名)。并且列表索引将存储在entity_index而不是默认的entity_key.
我创建了一个问题来改进文档。
TA贡献1865条经验 获得超7个赞
命名行为由接口的默认实现定义 NamingStrategy
来自参考文档,版本 1.0.2 的第 4.4.3 节:
当您使用 Spring Data JDBC 提供的 CrudRepository 的标准实现时,他们期望特定的表结构。您可以通过在应用程序上下文中提供 NamingStrategy 来调整它。
默认实现具有以下行为(来自 javadoc 1.0.2 版):
默认为无模式,基于类的表名和基于 RelationalPersistentProperty 的列名,两者的名称部分以“_”分隔。
因此,创建一个 bean,该 beanNamingStrategy在您的应用程序上下文中注册它。
这是@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";
}
};
}
}
添加回答
举报