我正在學習 SpringBoot 并嘗試創建一個簡單的 API。使用 H2 作為數據層。我的表架構如下DROP TABLE IF EXISTS Users;DROP TABLE IF EXISTS Cards;CREATE TABLE Users(USER_ID INT PRIMARY KEY, NAME VARCHAR(255) NOT NULL, USERNAME VARCHAR(255) NOT NULL, PASSWORD VARCHAR(255) NOT NULL, IS_ADMIN BOOL);insert into Users values(10001,'Administrator', 'admin', 'admin', true);CREATE TABLE Cards(CARD_ID INT PRIMARY KEY, NUMBER VARCHAR(20) NOT NULL, EXPIRY VARCHAR(5) NOT NULL, CVV INT, USER INT, foreign key (USER) references Users(USER_ID));我的用戶實體如下所示package springboot;import io.swagger.annotations.ApiModel;import io.swagger.annotations.ApiModelProperty;import lombok.Data;import javax.persistence.*;import javax.validation.constraints.NotBlank;import java.util.List;@Data@Entity@Table(name = "USERS")@ApiModel(description = "the USER object")public class User { @ApiModelProperty(notes = "The id of User") private @Column(name = "USER_ID") @Id @GeneratedValue Long user_id; @ApiModelProperty(notes = "The name of User") private @Column(name = "NAME") String name; @ApiModelProperty(notes = "The username of User", required = true) @NotBlank(message = "Username is mandatory") private @Column(name = "USERNAME") String username; @ApiModelProperty(notes = "The password of User", required = true) @ValidPassword(message = "Password is mandatory") private @Column(name = "PASSWORD") String password; @ApiModelProperty(notes = "The admin status of User") private @Column(name = "IS_ADMIN") boolean isAdmin; @OneToMany(mappedBy = "user", cascade = CascadeType.ALL) private List<CreditCard> cards; public User() {} public User(String name, String username, String password, boolean isAdmin) { this.name = name; this.username = username; this.password = password; this.isAdmin = isAdmin; }我試圖搜索并遵循幾個教程,但無法使其正常工作。有人可以指出我錯在哪里嗎?
1 回答

蠱毒傳說
TA貢獻1895條經驗 獲得超3個贊
實際上是例外
Column "USER_USER_ID" not found;
如果您看到查詢,insert into cards (cvv, expiry, number, user_user_id, card_id) values (?, ?, ?, ?, ?)
則提到了user_user_id,它不是列名
所以問題是你沒有user
在 CreditCard
實體中提到列名。嘗試下面它會工作
在 CreditCard.class 中進行更改
@ApiModelProperty(notes = "The owner user of credit card") @ManyToOne @JoinColumn(name = "user") // Added the name attribute private User user;
如果您查看他們的源代碼,@JoinColumn's name attribute
他們已經明確提到
如果連接用于元素集合,
連接列名稱形成為
以下內容的串聯:實體的名稱;“_”;
引用的主鍵列的名稱。
編輯
對于第二部分,您可以直接使用 JPA 的功能。
List<CreditCard> findByNumberContainingAndUser(String number, User user);
添加回答
舉報
0/150
提交
取消