SpringBoot2中列的命名策略
如何将spring配置为在列中使用下划线,而不在SpringBoot2中列的命名策略,spring,hibernate,spring-boot,jpa,spring-data-jpa,Spring,Hibernate,Spring Boot,Jpa,Spring Data Jpa,如何将spring配置为在列中使用下划线,而不在@Column中明确定义?例如,如果我在实体中有如下列: @LastModifiedBy private String changedBy; 我想将其映射到数据库中的物理列,该列由 我试图用属性spring.jpa.hibernate.naming.physical strategy配置到SpringPhysicalNamingStrategy或PhysicalNamingStrategyStandardImpl,但我总是遇到异常错误:关系“xx
@Column
中明确定义?例如,如果我在实体中有如下列:
@LastModifiedBy
private String changedBy;
我想将其映射到数据库中的物理列,该列由
我试图用属性spring.jpa.hibernate.naming.physical strategy
配置到SpringPhysicalNamingStrategy或PhysicalNamingStrategyStandardImpl,但我总是遇到异常错误:关系“xxxx”的“changedby”列不存在
您可以使用手动指定列的名称:
@LastModifiedBy
@Column(name="changed_by")
private String changedBy;
你可以用
我们可以告诉Hibernate使用我们的新策略:
hibernate.physical_naming_strategy=com.baeldung.hibernate.namingstrategy.CustomPhysicalNamingStrategy
public class CustomPhysicalNamingStrategy implements PhysicalNamingStrategy {
@Override
public Identifier toPhysicalCatalogName(final Identifier identifier, final JdbcEnvironment jdbcEnv) {
return convertToSnakeCase(identifier);
}
@Override
public Identifier toPhysicalColumnName(final Identifier identifier, final JdbcEnvironment jdbcEnv) {
return convertToSnakeCase(identifier);
}
@Override
public Identifier toPhysicalSchemaName(final Identifier identifier, final JdbcEnvironment jdbcEnv) {
return convertToSnakeCase(identifier);
}
@Override
public Identifier toPhysicalSequenceName(final Identifier identifier, final JdbcEnvironment jdbcEnv) {
return convertToSnakeCase(identifier);
}
@Override
public Identifier toPhysicalTableName(final Identifier identifier, final JdbcEnvironment jdbcEnv) {
return convertToSnakeCase(identifier);
}
private Identifier convertToSnakeCase(final Identifier identifier) {
final String regex = "([a-z])([A-Z])";
final String replacement = "$1_$2";
final String newName = identifier.getText()
.replaceAll(regex, replacement)
.toLowerCase();
return Identifier.toIdentifier(newName);
}
}
在我的设置(Postgres
,Flyway
)中,我使用hybernate类型
包来实现这一点。这将为命名策略提供一个现成的实现:CamelCaseToSnakeCaseNamingStrategy
您可以在XML中这样配置:
@LastModifiedBy
private String changedBy;
或者,您可以在代码中配置它(在我的例子中是Kotlin):
有关更多信息,请参见。我知道,但我希望避免使用它,因为我会在整个应用程序中更改它。在boot 1.5中,我们已经将驼峰案例映射为snake automaticallySpringPhysicalNamingStrategy做您想要的。不适合我。。我不明白。我还将它创建为bean并将其标记为主bean,但当我在调试模式下运行时,我的断点在不同的策略中被击中implementation@DenisStephanov您是否使用application.properties?是否有一行
休眠。物理命名策略
?