【问题标题】:Why is Hibernate 5 not respecting my @Column name?为什么 Hibernate 5 不尊重我的 @Column 名称?
【发布时间】:2017-03-27 15:51:04
【问题描述】:

对于我的 JPA 实体,我总是用 @Table@Column 注释所有内容我不希望 Hibernate 猜测表或列的名称应该是什么。我希望 Hibernate 使用我的代码中的内容。

我有一个具有以下字段映射的实体

@Column(name = "isPrimary")
private Boolean isPrimary;

使用 Hibernate 4.x 生成的 sql 查询会将列名列为 isprimary 但是当我升级我的应用程序以使用 SpringBoot 1.4 从没有 SpringBoot 的传统 .war 时。 Hibernate 5 开始使用is_primary 作为它生成的查询中的列名,这导致了异常,因为数据库列被称为isprimary 而不是is_primary

我将我的@Column(name = "isPrimary") 更改为@Column(name = "isprimary"),Hibernate 5 重新正确生成列名。

我对 JPA 的理解是,如果您设置了 @Column,那么 JPA 提供者应该尊重这一点,并且不要混淆注释中的名称。

  • 我对 JPA 的理解正确吗?
  • 为什么 Hibernate 更改名称?

【问题讨论】:

  • 检查命名策略,这个接口通常是解决此类问题的方法
  • 您对 JPA 规范的理解是正确的。如果 Hibernate 即使在您指定了名称后仍然使用该名称,那么 Hibernate 有一个“问题”

标签: java spring hibernate jpa orm


【解决方案1】:

Spring Boot 1.4开始,由于切换到Hibernate 5, 命名策略已更新为 SpringPhysicalNamingStrategy,应该非常接近 1.3 的默认值。

SpringNamingStrategy 不再使用,因为 Hibernate 5.1 移除了对旧 NamingStrategy 接口的支持。现在自动配置了一个新的 SpringPhysicalNamingStrategy,它与 Hibernate 的默认 ImplicitNamingStrategy 结合使用。这应该与 Spring Boot 1.3 的默认值非常接近(如果不相同),但是,您应该在升级时检查您的数据库架构是否正确。

For More Details

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-03-03
    • 2015-09-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-14
    • 1970-01-01
    相关资源
    最近更新 更多