Spring / Hibernate 与额外列的一对一关系

Spring / Hibernate One to One relationship with extra column

是否可以在 Spring/Hibernate with extra-column 中建立一对一关系?如果是,我们该怎么做?我想我必须使用 join table to link 我的两个实体,然后在此 join table 中添加一个额外的列,但我不知道如何。

这是一个对员工和工作站之间的关系进行建模的代码示例,它使用 @JoinTable 以便在专用连接 table 中持久保存该关系。我想在此关系中添加额外的信息,例如员工上次使用给定工作站的时间,我该怎么做?

员工实体:

@Entity
@Table(name = "employee")
public class Employee {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "id")
    private Long id;

    //...

    @OneToOne(cascade = CascadeType.ALL)
    @JoinTable(name = "emp_workstation", 
      joinColumns = { @JoinColumn(name = "employee_id", referencedColumnName = "id") },
      inverseJoinColumns = { @JoinColumn(name = "workstation_id", referencedColumnName = "id") })
    private WorkStation workStation;

    //... getters and setters
}

WorkStation 实体:

@Entity
@Table(name = "workstation")
public class WorkStation {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "id")
    private Long id;

    //...

    @OneToOne(mappedBy = "workStation")
    private Employee employee;

    //... getters and setters
}    

首先,我建议您更改 Employee 和 Workstation 之间的关系以创建一个 @ManyToOne 。

一对一关系将一个 table 中的 一条记录 与另一个 table 中的一条记录相关联。

多对一关系将一个 table 中的 多个记录 与另一个 table 中的单个记录相关联。

然后,使用@ManyToOne 如果:

  • 你的数据库中有很多工作站,用户可以访问 只有一个工作站。
  • 一名员工可以使用不同的工作站(或同一工作站),但一次只能使用一个。

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(
        name = "workstation_id",
        foreignKey = @ForeignKey(name = "fk_workstation_id")
    )
    private WorkStation workStation;

根据一对一关系中附加数据的问题,应该 return 在您的实体中映射所有数据。

然后,如果您存储 "the last time the employee used a given workstation",这意味着您可能在 table "workstation".

中拥有给定员工的多条记录