为什么Hibernate 5不尊重我的@Column名称?

时间:2016-11-14 03:24:55

标签: java spring hibernate jpa orm

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

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

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

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

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

我对JPA的理解是,如果你设置@Column,那么JPA提供者应该尊重它,而不是弄乱注释中的名称。

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

1 个答案:

答案 0 :(得分: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

相关问题