2017-05-20 83 views
1

我有一个关于休眠映射了一个小问题: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; 
} 

而且这工作,我没有问题,但是,我需要有3个领域的工人,workerIn,workerOut,workerMain

所以我怎么能让我的汽车类更多的领域,所以我可以存储我的工人在他们,因为当我尝试创建新的ObjectProperty<Worker>我从hibernate得到错误,它无法找到字段类型。

所以,我不知道,我使用错误的映射?我应该使用manyToMany, 还是应该注释每一个我在Car类中创建的字段?

基本上会提示用户从工作人员列表中选择workerIn,workerOut,workerMain,并且我无法实现这一点,并且为此创建3个列表将是疯狂的。

回答

0

我会创建一个连接表,因为这看起来像一个多对多的映射场景。

所以表将具有列(提防worker_type鉴别):

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 ow gui,我想创建我的新车,并且我想分配一个工人,一个角色,或者一个工作人员分配两个角色。但现在我car.setMainWorker()或任何其他,正在接受Set 而不是它自己的工人,我无法设法解决这个问题。 – ImRaphael

+0

您必须将它们添加到特定的Set Raphael(以及工人本身的汽车设置)。工人的类型在jointable.worker_type中定义(我假定是一个整数,但可以是其他类型) –

+0

谢谢,我设法使这个工作正常,非常感谢。 – ImRaphael