当我试图得到一对多,多到一的关系时,我遇到了车辆表中联接列的问题。为什么hibernate要搜索列USER_ID而不是将它加入到表中?我知道加入的目的,但是当我试图将它与映射属性一起使用时,我得到了这个错误。那密码怎么了?
我得到的例外是:
原因:“字段列表”中的com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:未知列“USER_ID”
用户表:
@Entity
@Table(name = "users")
public class User {
public User(){}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getFirst_name() {
return first_name;
}
public void setFirst_name(String first_name) {
this.first_name = first_name;
}
public int getSalary() {
return salary;
}
public void setSalary(int salary) {
this.salary = salary;
}
public String getLast_name() {
return last_name;
}
public void setLast_name(String last_name) {
this.last_name = last_name;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", first_name='" + first_name + '\'' +
", salary=" + salary +
", last_name=" + last_name +
'}';
}
public Collection<Vehicle> getVehicles() {
return vehicles;
}
public void setVehicles(Collection<Vehicle> vehicles) {
this.vehicles = vehicles;
}
@OneToMany(mappedBy = "user")
private Collection<Vehicle> vehicles = new ArrayList<>();
public Collection<Address> getAddresses() {
return addresses;
}
public void setAddresses(Collection<Address> addresses) {
this.addresses = addresses;
}
@ElementCollection // for saving the collection or persist it to database
@JoinTable(joinColumns = @JoinColumn(name = "fk_user_id")) // will add to the fk created table renamed column "fk_user_id"
private Collection<Address> addresses = new ArrayList<>();
@Id
@Column(name = "user_id")
private int id;
@Column(name = "first_name")
private String first_name;
@Column(name = "salary")
private int salary;
@Column(name = "last_name")
private String last_name;
}车辆:
@Entity
@Table(name = "vehicle")
public class Vehicle {
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
@ManyToOne
@JoinColumn(name = "USER_ID")
private User user;
public int getVehicle_id() {
return vehicle_id;
}
public void setVehicle_id(int vehicle_id) {
this.vehicle_id = vehicle_id;
}
public String getVehicle_name() {
return vehicle_name;
}
public void setVehicle_name(String vehicle_name) {
this.vehicle_name = vehicle_name;
}
@Id
private int vehicle_id;
private String vehicle_name;
}发布于 2017-02-21 12:08:17
你对@JoinColumn的态度和你想的有点不同。
当您有一个配置时:
public class Vehicle {
@ManyToOne
@JoinColumn(name = "USER_ID")
private User user;它告诉持久性提供程序在连接VEHICLE.USER_ID表和USERS表时使用VEHICLE列。
默认情况下,在USERS表端使用主键,在本例中,主键是一个名称相同的列:USERS.USER_ID (除非您显式地指定referencedColumnName属性i( @JoinColumn) )。
底线是您需要在您的车辆表中有一个user_id列。
https://stackoverflow.com/questions/42365989
复制相似问题