2017-02-21 13 views
0

私はOne To ManyとMany To To Relationsを取得しようとすると、車両テーブルのジョインカラムに問題があります。なぜハイバーネーションがテーブルにジョインするのではなく、カラムUSER_IDを検索していますか?私は参加の目的を知っていますが、マップされたBy属性でこのエラーを使用しようとしたときにこのエラーが発生しました。そのコードの何が間違っていますか?私が得たHibernate mappedByと@JoinColumn

例外: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; 

} 
+0

車両テーブルにUSER_ID列がありますか? –

+0

いいえ! vehicle_idとvehicle_name、@Join列は基本的に存在列の名前を変更しますか? –

+0

私はそれがテーブルに列を結合することができ、それを名前を変更することができます理解しています。私は私のユーザーテーブルのuser_id列を持っています。 –

答えて

1

@JoinColumnあなたは少し違った扱いをしています。

あなたが設定を持っている場合:

public class Vehicle { 

    @ManyToOne 
    @JoinColumn(name = "USER_ID") 
    private User user; 

それはVEHICLEUSERSテーブルが結合されているときVEHICLE.USER_ID列を使用して永続性プロバイダに指示します。 USERSテーブル側でデフォルトで

は、主キーは、この場合、同じ名前の列である、使用されている:USERS.USER_ID(明示的referencedColumnNameプロパティを指定しない限り、私@JoinColumn)。

結論として、車のテーブルにはuser_idの列が必要です。

関連する問題