我正在创建一个 Spring Boot API,它基本上要求用户创建一个帐户。帐户详细信息显示在表格上。我想从表单中获取详细信息并将其保存到数据库(MYSQL)中。模型类如下:@Table(name = "user")public class User { @Id @Column(name = "ID") private int ID; @Column(name = "Fname") private String fName; @Column(name = "Lname") private String lName; @Column(name = "dob") private String dob; @Column(name = "email") private String email; @Column(name = "pWord") private String pWord;}控制器类如下:public class MController { @Autowired private UserRepository userRepository; @PostMapping("/successSignUp") public String dataToDB(@ModelAttribute("User") User formData, Model model) { userRepository.save(new User(formData.getFname(), formData.getLname(), formData.getDob(), formData.getEmail(), formData.getPassword())); model.addAttribute("user", new User()); return "welcomeUser"; }当我执行此代码时,出现以下错误:java.sql.SQLSyntaxErrorException: Unknown column 'p_word' in 'field list'我在这里做错了什么?提前致谢。
2 回答
波斯汪
TA贡献1811条经验 获得超4个赞
Spring框架在内部将camel case更改为snake case。
这是 Spring Boot 命名策略的一部分:我们可以覆盖这些值,但默认情况下,这些将:
将骆驼箱改为蛇箱
将点替换为下划线
小写表名
您可以尝试将列名称更新为 pword 而不是 pWord 吗?
@Column(name = "pword") private String pWord;
如果您使用“pWord”,它将被视为 p_word。请将列名称更新为“pword”并尝试。
例子:
@Entity
public class Account {
@Id
private Long id;
private String defaultEmail;
}
And then turn on some SQL debugging in our properties file:
hibernate.show_sql: true
At startup, we'll see the following create statement in our logs:
Hibernate: create table account (id bigint not null, default_email varchar(255))
慕虎7371278
TA贡献1802条经验 获得超4个赞
解决此问题的最简单的解决方案是将列名称设置为小写或大写。
@Column(name = "pword") private String pWord;
或者
@Column(name = "PWORD") private String pWord;
这将避免 spring 将名称转换为蛇形命名。
MySql 中的列名不区分大小写,因此它可以工作。
添加回答
举报
0/150
提交
取消