Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SpringBoot2中列的命名策略_Spring_Hibernate_Spring Boot_Jpa_Spring Data Jpa - Fatal编程技术网

SpringBoot2中列的命名策略

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

如何将spring配置为在列中使用下划线,而不在
@Column
中明确定义?例如,如果我在实体中有如下列:

@LastModifiedBy
private String changedBy;
我想将其映射到数据库中的物理列,该列由

我试图用属性
spring.jpa.hibernate.naming.physical strategy
配置到SpringPhysicalNamingStrategyPhysicalNamingStrategyStandardImpl,但我总是遇到异常
错误:关系“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?是否有一行
休眠。物理命名策略