我正在使用 Spring-boot 1.4.1.RELEASE,以及 Spring Data 和 Hibernate 将一些数据保存到 MySQL 数据库中。
我有这门课,Respondent
, 注释为 @Entity
和注释如下的字段之一:
@Column(name = "firstName", nullable = false, length = 100)
private String firstName;
当我尝试通过调用 save()
将受访者保存到数据库时在其 CrudRepository<Respondent, Long>
,我得到这个错误:
ERRORcom.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column 'first_name' in 'field list'
这个错误在我得到 @Column
之前就开始发生了该字段的注释,所以我认为将 firstName 映射到 first_name 是一些默认的 Hibernate 行为,但我添加了 @Column
注释它并没有改变。还是错了?我已经用 mvn clean package
重建了应用程序.
这是我的受访者实体:
@Entity
public class Respondent {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private Long id;
@Column(name = "firstName", nullable = false, length = 100)
private String firstName;
private String tussenvoegsel;
@Column(name = "lastName", nullable = false, length = 100)
private String lastName;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "Company_id", nullable = false)
private Company company;
最佳答案
默认情况下,Spring 使用 jpa.SpringNamingStrategy
生成表名。
ImprovedNamingStrategy
会将 CamelCase
转换为 SNAKE_CASE
,而 EJB3NamingStrategy
只是使用未更改的表名。
您可以尝试将 naming_strategy
更改为:
spring.jpa.hibernate.naming_strategy=org.hibernate.cfg.EJB3NamingStrategy
或者 @Column name
属性应该是小写的 @Column(name = "firstname")
对于 Hibernate 5
这应该可以工作(我不太确定您是否还需要上面的那个。但是请尝试两者):
spring.jpa.hibernate.naming.implicit-strategy=org.hibernate.boot.model.naming.ImplicitNamingStrategyLegacyJpaImpl
spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
关于mysql - Spring Data 似乎不理解@Column 名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40488674/