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

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

问题描述:

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

我有以下字段映射

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

使用Hibernate 4.x版生成的SQL查询的实体将列出列名作为isprimary但是当我升级我的应用程序从传统的.war使用SpringBoot 1.4没有SpringBoot。休眠5,它产生的查询造成的异常使用is_primary作为列名开始,因为数据库列被称为isprimaryis_primary

我改变了我的@Column(name = "isPrimary")@Column(name = "isprimary")和Hibernate 5回到正确生成列名。

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

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

检查命名策略,该接口通常是此类问题的解决 –

+0

您的JPA规范的理解是正确的。如果Hibernate即使在你指定了名称的情况下也会使用这个名字,那么Hibernate有一个“问题” –

春季启动1.4开始,因为开关的休眠5, 的命名策略已经更新到SpringPhysicalNamingStrategy这应该是非常接近1.3的默认值。

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

For More Details