Spring Boot + JPA:忽略字段名称注解。
Spring Boot + JPA:忽略字段名称注解。
我有一个基于Spring Boot的应用程序,使用的依赖是spring-boot-starter-data-jpa
。我的实体类有一个带有列名注解的@Column属性。例如:
@Column(name="TestName") private String testName;
由此产生的SQL会将test_name
作为列名。在寻找解决方案时,我发现spring.jpa.hibernate.naming_strategy=org.hibernate.cfg.EJB3NamingStrategy
可以解决此问题(从列注释中获取列名)。
但是,我的问题是,如果没有设置EJB3NamingStrategy
命名策略,为什么JPA会忽略列注释?也许Hibernate方言(dialect)与此有关?我连接到MS SQL 2014 Express,我的日志包含:
Unknown Microsoft SQL Server major version [12] using SQL Server 2000 dialect Using dialect: org.hibernate.dialect.SQLServerDialect
admin 更改状态以发布 2023年5月22日
默认情况下,Spring使用 org.springframework.boot.orm.jpa.SpringNamingStrategy
来生成表名。这是对 org.hibernate.cfg.ImprovedNamingStrategy
的极度轻微的扩展。在该类中的tableName
方法接收源 String
值,但它不知道它来自 @Column.name
属性还是隐式从字段名生成的。
ImprovedNamingStrategy
将 CamelCase
转换为 SNAKE_CASE
,而 EJB3NamingStrategy
仅使用未更改的表名。
如果您不想更改命名策略,您始终可以只在小写中指定列名:
@Column(name="testname")