2017-05-20 13 views
1

同じオブジェクトを使用して:Hibernateマッピング:私はHibernateのマッピングに関する小さな問題を抱えている複数回

私は必要なものは以下の通りです:

私は、クラスCar、およびクラスWorkerを持っています。

私はそれらを@ManyToOneとしてマップしました。 @ManyToOneが車の側にある場合は:

//これは車のクラスで私のフィールドである私は、JavaFXのプロパティ

private ObjectProperty<Monter> monter= new SimpleObjectProperty<>(); 

@ManyToOne 
@JoinColumn(name = "worker_id") 
public Worker getWorker() { 
    return worker.get(); 
} 

と労働者側での使用

@OneToMany(mappedBy ="worker",cascade=CascadeType.ALL) 
public List<Car> getCar() { 
    return car; 
} 

を以下そして、これは動作しますが、Iしかし問題はありませんが、私は労働者のために3フィールド、workerInworkerOutworkerMainが必要です。

私は新しいクラスを作成しようとしているので、私は自分のCarクラスのフィールドを増やすことができます。ObjectProperty<Worker>私はフィールドタイプを見つけることができないというエラーをhibernateから受け取ります。

私は間違ったマッピングを使用していますか?私はmanyToMany、 を使用する必要がありますか?私はCarクラスで作成するすべてのフィールドに注釈を付ける必要がありますか?

基本的に、ワーカーのリストからworkerIn、workerOut、workerMainを選択するように求められますが、これを実現できませんでした.3つのリストを作成するのは非常識です。

答えて

0

多対多のマッピングシナリオのように見えるので、私は結合テーブルを作成します。

ので表には、列(worker_type弁別に気を付ける)必要があります:あなたが持っているでしょうCarクラスで

worker_id 
car_id 
worker_type 

@ManyToMany 
@JoinTable(
     name="car_worker", 
     [email protected](name="CAR_ID", referencedColumnName="ID"), 
     [email protected](name="WORKER_ID", referencedColumnName="ID")) 
@WhereJoinTable(clause = "worker_type = 1") 
private Set<Worker> workerIn; 

@ManyToMany 
@JoinTable(
     name="car_worker", 
     [email protected](name="CAR_ID", referencedColumnName="ID"), 
     [email protected](name="WORKER_ID", referencedColumnName="ID")) 
@WhereJoinTable(clause = "worker_type = 2") 
private Set<Worker> workerOut; 

@ManyToMany 
@JoinTable(
     name="car_worker", 
     [email protected](name="CAR_ID", referencedColumnName="ID"), 
     [email protected](name="WORKER_ID", referencedColumnName="ID")) 
@WhereJoinTable(clause = "worker_type = 3") 
private Set<Worker> workerMain; 

ワーカークラスが持っているでしょう:

@ManyToMany 
@JoinTable(
     name="car_worker", 
     [email protected](name="WORKER_ID", referencedColumnName="ID"), 
     [email protected](name="CAR_ID", referencedColumnName="ID")) 
private Set<Car> cars; 
+0

私はこれを完全に理解していません、私は今私の労働者をどのように設定するでしょうか: 私はnを持っています私は新しい車を作りたいと思っています。私は、1つの役割のために、あるいは2つの役割のための1つの作業者を割り当てる必要があります。しかし今は私のcar.setMainWorker()または他のものは、Set を受け入れていて、それは自分ではできません。これを解決することはできません。 – ImRaphael

+0

特定のSet Raphael(およびWorker自体の車セット)にそれらを追加する必要があります。作業者のタイプはjointable.worker_typeで定義されています(私はintergerと仮定しましたが、これは他のタイプかもしれません) –

+0

ありがとう、私はこの作業を正しく行うことができました。 – ImRaphael

関連する問題