未保存 Java JPA 外键引用

我正在学习 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;

    }


我试图搜索并遵循几个教程,但无法使其正常工作。有人可以指出我错在哪里吗?


慕雪6442864
浏览 104回答 1
1回答

蛊毒传说

实际上是例外Column "USER_USER_ID" not found;如果您看到查询,insert into cards (cvv, expiry, number, user_user_id, card_id) values (?, ?, ?, ?, ?)则提到了user_user_id,它不是列名所以问题是你没有user在&nbsp;CreditCard实体中提到列名。尝试下面它会工作在 CreditCard.class 中进行更改&nbsp;&nbsp;&nbsp;&nbsp;@ApiModelProperty(notes&nbsp;=&nbsp;"The&nbsp;owner&nbsp;user&nbsp;of&nbsp;credit&nbsp;card") &nbsp;&nbsp;&nbsp;&nbsp;@ManyToOne &nbsp;&nbsp;&nbsp;&nbsp;@JoinColumn(name&nbsp;=&nbsp;"user")&nbsp;//&nbsp;Added&nbsp;the&nbsp;name&nbsp;attribute &nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;User&nbsp;user;如果您查看他们的源代码,@JoinColumn's name attribute他们已经明确提到如果连接用于元素集合,连接列名称形成为以下内容的串联:实体的名称;“_”;引用的主键列的名称。编辑对于第二部分,您可以直接使用 JPA 的功能。List<CreditCard>&nbsp;findByNumberContainingAndUser(String&nbsp;number,&nbsp;User&nbsp;user);
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java