繁体   English   中英

如何在Spring Data JDBC中将实体映射到表?

[英]How to map entity to table in Spring Data JDBC?

在Spring Data JPA中,我们可以使用@Table注释将实体映射到特定的表,我们可以在其中指定模式和名称。

但Spring Data JDBC使用NamingStrategy通过转换实体类名称将实体映射到表名。 例如,如果我们有名为MetricValue的实体类,那么该表应该在默认模式中命名为metricvalue 但是我需要将MetricValue映射到app schema中的metric_value表。

有没有办法通过注释或任何其他方式覆盖此映射?

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;
}

这将在表entity读取和写入MyEntity而不是默认的my_entity 属性name将存储在last_name列中。 some_other_entityentity反向引用列将被命名为entity_id用于外键列,通常是entity (引用表的表名)。 列表索引将存储在entity_index而不是默认的entity_key

我创建了一个改进文档的问题

命名行为由接口NamingStrategy的默认实现定义

参考文档,版本1.0.2的4.4.3节

当您使用Spring Data JDBC提供的CrudRepository的标准实现时,它们期望某个表结构。 您可以通过在应用程序上下文中提供NamingStrategy来进行调整。

默认实现具有以下行为(来自javadoc版本1.0.2)

默认为无架构,表名基于基于RelationalPersistentProperty的Class和column name,两者的名称部分用'_'分隔。

因此,创建一个实现NamingStrategy的bean,在您的应用程序上下文中注册它。

这是@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";
            }
        };
    }
}

使用@Table(name = "metric_value")

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM