gpt4 book ai didi

spring - 使用外部属性文件配置的表名

转载 作者:行者123 更新时间:2023-12-03 15:48:56 24 4
gpt4 key购买 nike

我构建了一个访问数据库并从中提取数据的 Spring-Boot 应用程序。一切正常,但我想从外部 .properties 文件配置表名。

像:

@Entity
@Table(name = "${fleet.table.name}")
public class Fleet {
...
}

我试图找到一些东西,但我没有。

您可以使用 @Value("...") 访问外部属性注解。

所以我的问题是:有什么方法可以配置表名吗?或者我可以更改/拦截休眠发送的查询吗?

解决方案:

好的,hibernate 5 与 PhysicalNamingStrategy 一起工作.所以我创建了自己的 PhysicalNamingStrategy .
@Configuration 
public class TableNameConfig{

@Value("${fleet.table.name}")
private String fleetTableName;

@Value("${visits.table.name}")
private String visitsTableName;

@Value("${route.table.name}")
private String routeTableName;

@Bean
public PhysicalNamingStrategyStandardImpl physicalNamingStrategyStandard(){
return new PhysicalNamingImpl();
}

class PhysicalNamingImpl extends PhysicalNamingStrategyStandardImpl {

@Override
public Identifier toPhysicalTableName(Identifier name, JdbcEnvironment context) {
switch (name.getText()) {
case "Fleet":
return new Identifier(fleetTableName, name.isQuoted());
case "Visits":
return new Identifier(visitsTableName, name.isQuoted());
case "Result":
return new Identifier(routeTableName, name.isQuoted());
default:
return super.toPhysicalTableName(name, context);
}
}
}
}

另外,这个 Stackoverflow article over NamingStrategy给了我这个想法。

最佳答案

表名实际上来自 hibernate 本身通过其策略接口(interface)。引导将此配置为 SpringNamingStrategy Boot 2.x 中对如何自定义事物进行了一些更改。值得一读gh-1525进行这些更改的地方。 Configure Hibernate Naming Strategy有更多信息。

有一些想法可以添加一些自定义属性来配置 SpringNamingStrategy但是我们允许更轻松地自定义整个策略 bean,因为它允许用户做他们需要做的任何事情。

AFAIK,没有像你问的那样直接进行配置的方法,但我假设如果你创建自己的策略,那么你可以将你自己的属性自动连接到那里。正如在那些自定义策略界面中您将看到实体名称一样,您可以在引导的配置属性中为此保留一个键空间并匹配实体名称。

mytables.naming.fleet.name=foobar
mytables.naming.othertable.name=xxx

您的配置属性将采用 mytables并在其中 naming将是 Map .然后在您的自定义策略中,如果您定义了自定义名称,只需从映射表中检查即可。

关于spring - 使用外部属性文件配置的表名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49148172/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com