亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

未保存 Java JPA 外鍵引用

未保存 Java JPA 外鍵引用

慕雪6442864 2023-02-16 16:26:41
我正在學習 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);


查看完整回答
反對 回復 2023-02-16
  • 1 回答
  • 0 關注
  • 96 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號