【问题标题】: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 添加了数据库选项卡,以便您可以查看列的命名方式:

【问题讨论】:

    标签: java jpa orm relational-database


    【解决方案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(){
    
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-24
      • 2021-05-07
      • 2020-08-13
      • 1970-01-01
      • 2019-10-20
      相关资源
      最近更新 更多