我有一个关于 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;
}
这有效,我没有任何问题,但是,我需要为 worker 提供 3 个字段,workerIn
, workerOut
, workerMain
.
那么我如何在我的 Car 类中创建更多字段,以便我可以将我的工作人员存储在其中,因为当我尝试创建新的 ObjectProperty<Worker>
时我从 hibernate 收到错误,它无法找出字段类型。
所以,我不确定,我是否使用了错误的映射?我应该使用manyToMany, 或者我应该注释我在 Car 类中创建的每个字段?
基本上,系统会提示用户从工作人员列表中选择,workerIn、workerOut、workerMain,但我无法实现此目的,为此创建 3 个列表将是疯狂的。
最佳答案
我会创建一个联接表,因为这看起来像多对多映射场景。
因此该表将包含列(注意worker_type 鉴别器):
worker_id
car_id
worker_type
在汽车类(class)中,您将拥有:
@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;
Worker 类将具有:
@ManyToMany
@JoinTable(
name="car_worker",
joinColumns=@JoinColumn(name="WORKER_ID", referencedColumnName="ID"),
inverseJoinColumns=@JoinColumn(name="CAR_ID", referencedColumnName="ID"))
private Set<Car> cars;
关于java - hibernate 映射: using same object multiple times,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44090096/