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".
中拥有给定员工的多条记录
是否可以在 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".
中拥有给定员工的多条记录