我收到一个未知的列错误,但我确实有该列?

I get a unknown column error but I do have the column?

所以我在 java 中制作了我的第一个 RESTful API,但我被卡住了。 我正在使用外键,所以我遇到了 ORM。 我正在学习它,所以我可能不了解所有内容。 无论如何我收到这个错误:

java.sql.SQLSyntaxErrorException: Unknown column 'user0_.account_id' in 'field list'

虽然我想我确实有那个专栏。

我的数据库(相关部分):

我的用户模型class:

@Entity
@Table(name="user")
@Getter
@Setter
public class User {

    public User(Integer id) {
        this.id = id;
    }

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name="id")
    private Integer id;

    @OneToOne(fetch = FetchType.LAZY)
    @JoinColumn(name="accountId", referencedColumnName = "Id")
    private Account account;


    public User(){

    }

}

我的账户模型class:

@Entity
@Table(name="account")
@Getter
@Setter
public class Account {

    public Account(Integer id, String firstName, String lastName, String email, String password, Boolean locked, Boolean enabled) {
        this.id = id;
        this.firstName = firstName;
        this.lastName = lastName;
        this.email = email;
        this.password = password;
        this.locked = locked;
        this.enabled = enabled;
    }

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer id;
    private String firstName;
    private String lastName;
    private String email;
    private String password;
    private Boolean locked;
    private Boolean enabled;

    @OneToOne(mappedBy = "account" , cascade = CascadeType.ALL,
            fetch = FetchType.LAZY, optional = false)
    private User user;

    public Account(){

    }


}

我似乎无法在其他类似 post 中找到适合我的答案。 我确实认为它与映射有关,但我不确定。 我想你只需要这 2 classes,但如果你需要其他任何东西来回答我的问题,请问他们,我会把它们包括在我的 post.

提前致谢!

为了让我的数据库更清晰,我添加了 IntelliJ 的数据库选项卡,以便您可以看到列的命名方式:

看看你的 class User:

@JoinColumn(name="accountId", referencedColumnName = "Id")
private Account account;

您必须在此处使用数据库列名称,而不是实体字段名称。如果该列在数据库中确实被命名为 account_id(从错误消息来看似乎就是这种情况),那么这应该是:

@JoinColumn(name="account_id", referencedColumnName = "id")
private Account account;

我从老师的反馈中找到了答案。我以错误的方式实现了用户和帐户表。 我需要以这种方式实现它:

当我在我的数据库和我的代码中这样更改它时:

用户class:

@Entity
@Table(name="user")
@Getter
@Setter
public class User {

    public User(Integer id) {
        this.id = id;
    }

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name="id")
    private Integer id;


    @OneToOne(mappedBy = "user" , cascade = CascadeType.ALL,
            fetch = FetchType.LAZY, optional = false)
    private Account account;


    public User(){

    }

帐号class:

@Entity
@Table(name="account")
@Getter
@Setter
public class Account {

    public Account(Integer id, String firstName, String lastName, String email, String password, Boolean locked, Boolean enabled) {
        this.id = id;
        this.firstName = firstName;
        this.lastName = lastName;
        this.email = email;
        this.password = password;
        this.locked = locked;
        this.enabled = enabled;
    }

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer id;
    private String firstName;
    private String lastName;
    private String email;
    private String password;
    private Boolean locked;
    private Boolean enabled;



    @OneToOne(fetch = FetchType.LAZY)
    @JoinColumn(name="id", referencedColumnName = "id")
    private User user;

    public Account(){

    }