我对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
。
那么如何在我的Car类中创建更多字段,这样我就可以将我的worker存储在其中,因为当我尝试创建新的ObjectProperty<Worker>
时,我从hibernate中得到错误,它无法找到字段类型。< / p>
所以,我不确定,我使用错误的映射吗?我应该使用manyToMany, 或者我应该注释我在Car class中创建的每个字段吗?
基本上会提示用户从工作人员列表中选择,workerIn,workerOut,workerMain,我无法实现这一点,为此创建3个列表将是疯狂的。
答案 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;