Hibernate映射:多次使用同一个对象

时间:2017-05-20 19:38:01

标签: java hibernate jpa javafx

我对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个字段,workerInworkerOutworkerMain

那么如何在我的Car类中创建更多字段,这样我就可以将我的worker存储在其中,因为当我尝试创建新的ObjectProperty<Worker>时,我从hibernate中得到错误,它无法找到字段类型。< / p>

所以,我不确定,我使用错误的映射吗?我应该使用manyToMany, 或者我应该注释我在Car class中创建的每个字段吗?

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

1 个答案:

答案 0 :(得分:1)

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

因此该表将具有列(注意worker_type鉴别器):

worker_id
car_id
worker_type

在Car课程中你会有:

@ManyToMany
@JoinTable(
      name="car_worker",
      joinColumns=@JoinColumn(name="CAR_ID", referencedColumnName="ID"),
      inverseJoinColumns=@JoinColumn(name="WORKER_ID", referencedColumnName="ID"))
@WhereJoinTable(clause = "worker_type = 1")
private Set<Worker> workerIn;

@ManyToMany
@JoinTable(
      name="car_worker",
      joinColumns=@JoinColumn(name="CAR_ID", referencedColumnName="ID"),
      inverseJoinColumns=@JoinColumn(name="WORKER_ID", referencedColumnName="ID"))
@WhereJoinTable(clause = "worker_type = 2")
private Set<Worker> workerOut;

@ManyToMany
@JoinTable(
      name="car_worker",
      joinColumns=@JoinColumn(name="CAR_ID", referencedColumnName="ID"),
      inverseJoinColumns=@JoinColumn(name="WORKER_ID", referencedColumnName="ID"))
@WhereJoinTable(clause = "worker_type = 3")
private Set<Worker> workerMain;

工人类会有:

@ManyToMany
@JoinTable(
      name="car_worker",
      joinColumns=@JoinColumn(name="WORKER_ID", referencedColumnName="ID"),
      inverseJoinColumns=@JoinColumn(name="CAR_ID", referencedColumnName="ID"))
private Set<Car> cars;