我正在創建一個 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
提交
取消