spring - Spring Boot 2中列的命名策略

标签 spring hibernate spring-boot jpa spring-data-jpa

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

@LastModifiedBy
private String changedBy;

我想将其映射到数据库中的物理列,该列是changed_by

我尝试使用属性spring.jpa.hibernate.naming.physical-strategy将其配置为SpringPhysicalNamingStrategyPhysicalNamingStrategyStandardImpl,但我总是得到异常错误:关系“xxxx”的列“changedby”不存在

最佳答案

在我的设置(PostgresFlyway)中,我使用 hybernate-types 包实现了这一点:https://github.com/vladmihalcea/hibernate-types 。这将为您提供一个现成的命名策略实现:CamelCaseToSnakeCaseNamingStrategy

您可以像这样在 XML 中进行配置:

<property name="hibernate.physical_naming_strategy"
value="com.vladmihalcea.hibernate.type.util.CamelCaseToSnakeCaseNamingStrategy"/>

或者,您可以在代码中配置它(在我的例子中是 Kotlin):


@Bean
fun entityManagerFactory(): LocalContainerEntityManagerFactoryBean {
    val jpaProperties = Properties().apply {
        put("hibernate.physical_naming_strategy", CamelCaseToSnakeCaseNamingStrategy::class.java.canonicalName)
        // ....
    }
    return LocalContainerEntityManagerFactoryBean().apply {
        setJpaProperties(properties)
        // ....
    }

另请参阅https://vladmihalcea.com/map-camel-case-properties-snake-case-column-names-hibernate/欲了解更多信息。

关于spring - Spring Boot 2中列的命名策略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59000152/

相关文章:

java - Spring 测试模块与 Mockito

java - 由于我的 SpringBoot 应用程序,Swagger UI 未显示,每个端点需要 2 个查询参数

mysql - @Qualifier 不能在 Spring Boot 中使用多个 DataSource bean

hibernate - 如何为特定类型的 NHibernate 查询添加默认 WHERE 条件

Spring Boot 收到错误 “There is already controller bean method” ,当在 Controller 中添加两个 get 或两个 post 方法时

java - 如何让嵌入式mongodb在应用程序关闭时保留数据?

java - 使用 Spring bean 的惰性对象构建器

java - 如何在Spring Controller 中使用JSON发送继承的对象?

hibernate - JPA 单向 @OnetoMany 失败

java - hibernate 中的问题 : Session is closed