对于我的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提供者应该尊重它,而不是弄乱注释中的名称。
答案 0 :(得分:1)
从 Spring Boot 1.4 开始,由于切换到Hibernate 5, 命名策略已更新为SpringPhysicalNamingStrategy,它应该非常接近1.3默认值。
不再使用SpringNamingStrategy,因为Hibernate 5.1已经删除了对旧NamingStrategy接口的支持。现在自动配置了一个新的SpringPhysicalNamingStrategy,它与Hibernate的默认ImplicitNamingStrategy结合使用。这应该与Spring Boot 1.3默认值非常接近(如果不相同),但是,在升级时应该检查数据库模式是否正确。