java - hibernate 映射: using same object multiple times

标签 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;
}

这有效,我没有任何问题,但是,我需要为 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/

相关文章:

java - 使用 JPA2 在 Hibernate 中急切加载 OneToMany

java - JPA + Spring 异常后回滚事务

java - 根据点找线

java - 如何从 bean 类型数组列表中获取元素的索引

java - Hibernate 有时会在子实体中留下空的外键字段

Java JPA/SAX 处理程序事件/for 循环未运行

java - Java 条件 Bean 验证

java - 在tomcat中创建一个文件

java - 为什么不简单地禁用未经检查的警告?

hibernate - 在Querydsl中选择Long类型变量