【问题标题】:How to prevent Spring Boot/Hibernate from converting entity column names from PascalCase to snake_case?如何防止 Spring Boot/Hibernate 将实体列名从 PascalCase 转换为 snake_case?
【发布时间】:2022-01-19 17:57:36
【问题描述】:

我今天偶然发现了一个奇怪的错误。我在 Spring Boot 应用程序中的 Java 持久性应用程序编程接口 (JPA) 实体之一无法正常工作。我将问题追踪到一个列:

@javax.persistence.Column(name = "NameWrittenInPascalCase")
java.lang.String c;

当我检查 Spring Boot/Hibernate 生成的结构化查询语言 (SQL) 查询时,我发现了问题。 Spring Boot 或 Hibernate 将 NameWrittenInPascalCase 转换为 name_written_in_pascal_case (只写在蛇形案例中)。 (当然,在数据库中,我的列名是用 PascalCase 写的)。

看在上帝的份上,为什么?

以及如何防止它这样做?

如果您需要其他信息,我使用 Spring Boot 版本 2.5.7。

【问题讨论】:

  • 你试过用反引号转义字符串吗?喜欢@javax.persistence.Column(name = "`NameWrittenInPascalCase`")
  • 不,但这没有帮助。在发送到服务器的查询中仍然有name_written_in_pascal_case。 :(
  • 取决于您的休眠版本,属性名称需要在 application.properties 中进行调整。参考这个帖子:stackoverflow.com/questions/29087626/…
  • 哦,谢谢。看起来这个问题可能与您链接的问题重复。之前找的时候没找到。

标签: java sql spring-boot hibernate entity


【解决方案1】:

在你的项目application.properties文件中设置命名策略:

spring.jpa.hibernate.naming-strategy=org.hibernate.cfg.EJB3NamingStrategy

默认值为org.springframework.boot.orm.jpa.SpringNamingStrategy


更新:

如果之前的属性不能解决您的问题,您可以使用这个(对于较新版本的 Hibernate):

spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl

【讨论】:

  • 不幸的是,即使设置了这个属性,hibernate 仍然发送name_written_in_pascal_case 而不是NameWrittenInPascalCase
  • 试试这个属性spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl@KRISTIJANTOMASINI
  • 这修复了它!非常感谢。您能否更新您的答案,以便我接受并给您声誉?
  • @KRISTIJANTOMASINI 不客气;我更新了我的答案
猜你喜欢
  • 1970-01-01
  • 2015-08-11
  • 1970-01-01
  • 2023-03-31
  • 1970-01-01
  • 2022-07-15
  • 1970-01-01
  • 2023-01-20
  • 1970-01-01
相关资源
最近更新 更多