首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Hibernate mappedBy和@JoinColumn

Hibernate mappedBy和@JoinColumn
EN

Stack Overflow用户
提问于 2017-02-21 11:25:44
回答 1查看 1.4K关注 0票数 0

当我试图得到一对多,多到一的关系时,我遇到了车辆表中联接列的问题。为什么hibernate要搜索列USER_ID而不是将它加入到表中?我知道加入的目的,但是当我试图将它与映射属性一起使用时,我得到了这个错误。那密码怎么了?

我得到的例外是:

原因:“字段列表”中的com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:未知列“USER_ID”

用户表:

代码语言:javascript
复制
@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;
 }

车辆:

代码语言:javascript
复制
@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;

}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-02-21 12:08:17

你对@JoinColumn的态度和你想的有点不同。

当您有一个配置时:

代码语言:javascript
复制
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列。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42365989

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档