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)
Spring默认uses jpa.SpringNamingStrategy生成表名。
该ImprovedNamingStrategy会转换CamelCase到SNAKE_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)
| 归档时间: |
|
| 查看次数: |
3894 次 |
| 最近记录: |