我收到一个未知的列错误,但我确实有该列?
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(){
}
所以我在 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(){
}