Spring Data 似乎不理解@Column 名称

Hen*_*ine 2 mysql hibernate spring-data spring-data-jpa spring-boot

我正在使用 Spring-boot 1.4.1.RELEASE,以及 Spring Data 和 Hibernate 将一些数据保存到 MySQL 数据库中。

我有这个类, Respondent,@Entity和注释的字段之一,如下所示:

@Column(name = "firstName", nullable = false, length = 100)
private String firstName;
Run Code Online (Sandbox Code Playgroud)

当我尝试通过调用save()其将响应者保存到数据库时CrudRepository<Respondent, Long>,出现此错误:

ERRORcom.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column 'first_name' in 'field list'
Run Code Online (Sandbox Code Playgroud)

在我@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;
Run Code Online (Sandbox Code Playgroud)

Pat*_*ick 6

Spring默认uses jpa.SpringNamingStrategy生成表名。

ImprovedNamingStrategy会转换CamelCaseSNAKE_CASE其中的EJB3NamingStrategy只是使用表名不变。

您可以尝试将其更改naming_strategy为:

spring.jpa.hibernate.naming_strategy=org.hibernate.cfg.EJB3NamingStrategy
Run Code Online (Sandbox Code Playgroud)

或者@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
Run Code Online (Sandbox Code Playgroud)