Spring Data似乎无法理解@Column名称

时间:2016-11-08 13:52:37

标签: mysql hibernate spring-boot spring-data spring-data-jpa

我使用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;

2 个答案:

答案 0 :(得分:4)

默认情况下,Spring uses 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

答案 1 :(得分:0)

我们需要遵循一些命名策略。 列名称应为小写或大写。

 @Column(name="FIRSTNAME")
    private String firstName;

@Column(name="firstname")
private String firstName;

请记住,如果您在数据库中使用列名“ first_name”格式,则必须遵循以下方式

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