Spring Boot + JPA:忽略列名注释

2022-08-31 07:18:54

我有一个具有依赖性的Spring Boot应用程序。我的实体类具有一个带有列名称的列批注。例如:spring-boot-starter-data-jpa

@Column(name="TestName")
private String testName;

由此生成的 SQL 创建为列名。在寻找解决方案后,我发现解决了这个问题(列名取自列注释)。test_namespring.jpa.hibernate.naming_strategy=org.hibernate.cfg.EJB3NamingStrategy

不过,我的问题是,为什么没有naming_strategy设置为JPA会忽略列注释?也许冬眠方言与它有关?我正在连接到 MS SQL 2014 Express,我的日志包含:EJB3NamingStrategy

Unknown Microsoft SQL Server major version [12] using SQL Server 2000 dialect
Using dialect: org.hibernate.dialect.SQLServerDialect 

答案 1

对于Hibernate 5,我通过在apprament.properties文件中添加以下行来解决此问题:

spring.jpa.hibernate.naming.implicit-strategy=org.hibernate.boot.model.naming.ImplicitNamingStrategyLegacyJpaImpl
spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl

答案 2

默认情况下,Spring 用于生成表名。这是 的一个非常薄的扩展。该类中的方法传递源值,但它不知道它是否来自属性,或者它是否是从字段名称隐式生成的。org.springframework.boot.orm.jpa.SpringNamingStrategyorg.hibernate.cfg.ImprovedNamingStrategytableNameString@Column.name

将转换为原来,因为只是使用表名不变。ImprovedNamingStrategyCamelCaseSNAKE_CASEEJB3NamingStrategy

如果您不想更改命名策略,则始终可以只用小写字母指定列名:

@Column(name="testname")

推荐