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

Posted

技术标签:

【中文标题】我收到一个未知的列错误,但我确实有该列?【英文标题】:I get a unknown column error but I do have the column? 【发布时间】:2021-03-01 10:18:15 【问题描述】:

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

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

虽然我认为我确实有那个专栏。

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

我的用户模型类:

@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()

    


我的帐户模型类:

@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()

    



我似乎无法在其他类似帖子中找到适合我的答案。 我确实认为这与映射有关,但我不确定。 我认为您只需要这两个课程,但是如果您需要其他任何内容来回答我的问题,请询问他们,我会将它们包含在我的帖子中。

提前致谢!

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

【问题讨论】:

【参考方案1】:

在你的课堂上看看这个User

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

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

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

【讨论】:

当我尝试执行此操作时,我在 IntelliJ 中收到一条错误消息:无法解析列 'account_id' 当我键入 accountId 时,我没有收到此错误。旁边有或没有大写的referencedColumnName我给出了同样的错误(刚刚尝试过)。 我在帖子中添加了数据库【参考方案2】:

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

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

用户类别:

@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()

    

帐户类别:

@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()

    

【讨论】:

以上是关于我收到一个未知的列错误,但我确实有该列?的主要内容,如果未能解决你的问题,请参考以下文章

“Parcelable 协议需要一个名为 CREATOR 的 Parcelable.Creator 对象”(我确实有 CREATOR)- 在 Kotlin 中

递归 - 堆栈溢出错误

当我在 iPad 上收到“无法验证应用程序”错误时该怎么办?

UpdateActivity 抛出 400“未知活动类型”

当我看到该列存在时,SQLite 错误“没有这样的列”

R多核mcfork():无法分叉:无法分配内存