为什么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
作为列名开始,因为数据库列被称为isprimary
不is_primary
我改变了我的@Column(name = "isPrimary")
到@Column(name = "isprimary")
和Hibernate 5回到正确生成列名。
我对JPA的理解是,如果您设置了@Column
,那么JPA提供者应该尊重它,而不要在注释中弄乱名称。
- 我对JPA的理解是否正确?
- 为什么Hibernate更改名称?
答
从春季启动1.4开始,因为开关的休眠5, 的命名策略已经更新到SpringPhysicalNamingStrategy这应该是非常接近1.3的默认值。
SpringNamingStrategy不再使用,因为Hibernate 5.1已经取消了对旧的NamingStrategy接口的支持。现在自动配置一个新的SpringPhysicalNamingStrategy,它与Hibernate的默认ImplicitNamingStrategy结合使用。这应该与Spring Boot 1.3默认值非常接近(如果不相同),但是,升级时应检查数据库模式是否正确。
检查命名策略,该接口通常是此类问题的解决 –
您的JPA规范的理解是正确的。如果Hibernate即使在你指定了名称的情况下也会使用这个名字,那么Hibernate有一个“问题” –