Java 如何在SpringDataJPAForMySQL数据库中同时使用一对一和一对多关系
我在资源管理公司工作。在本模块中,我们将有下表 要求 需求 无职位空缺 职位 请求接收时间 需求状况 经验 技能 位置 资源 剩余物 名称 经验 技能 位置 地位 可获得的 需求ID(fk) 需求或资源可以独立创建。我们有匹配屏幕,用户可以在其中映射与需求匹配的资源(匹配标准将是两个表中的技能和经验)。一旦用户选择并保存需求,资源的状态就应该改变。每个资源都有状态Java 如何在SpringDataJPAForMySQL数据库中同时使用一对一和一对多关系,java,spring-data-jpa,Java,Spring Data Jpa,我在资源管理公司工作。在本模块中,我们将有下表 要求 需求 无职位空缺 职位 请求接收时间 需求状况 经验 技能 位置 资源 剩余物 名称 经验 技能 位置 地位 可获得的 需求ID(fk) 需求或资源可以独立创建。我们有匹配屏幕,用户可以在其中映射与需求匹配的资源(匹配标准将是两个表中的技能和经验)。一旦用户选择并保存需求,资源的状态就应该改变。每个资源都有状态[可用、入围、进行中、背景验证、已登机、已拒绝]。用户可以根据流程更改资源的状态。如果一个资源被拒绝,那么它应该可用于其他需求。为了为
[可用、入围、进行中、背景验证、已登机、已拒绝]
。用户可以根据流程更改资源的状态。如果一个资源被拒绝,那么它应该可用于其他需求。为了为一个需求创建报告,我们应该维护每个需求和资源状态,即有多少资源被列入短名单、有多少资源在船上以及有多少资源被拒绝
那么数据应该是这样的
req_res_status
---------------
resId resId status updatedDate comment
1 1 shortlisted 18/12/19 candidate shortlisted
1 1 Inprogress 19/12/19 Done with one F2F
1 1 Rejected 20/12/19 Rejected in second round - F2F
1 2 shortlisted 18/12/19 candidate shortlisted
1 2 Inprogress 19/12/19 Done with one F2F
1 2 BGV_check 20/12/19 Background verification In progress
1 2 onboarded 01/01/20 Onboarded
2 1 shortlisted 20/12/19 candidate shortlisted
2 1 Inprogress 21/12/19 Done with one F2F
2 1 BGV_check 22/12/19 Background verification In progress
2 1 onboarded 01/01/20 Onboarded
一个需求可以有多个资源,一个资源可以关联到一个需求
如何使用spring数据JPA实现这一点,以及如何维护这些关系
我试过这种方法
Resource.java
Resource.java
@实体
@NamedQuery(name=“Requirement.findAll”,query=“从需求r中选择r”)
公共类要求实现可序列化{
私有静态最终长serialVersionUID=1L;
@身份证
//@GeneratedValue(策略=GenerationType.IDENTITY)
@列(name=“req\u id”)
私有字符串编号;
@列(name=“确认状态”)
私有字符串确认状态;
@列(name=“确认时间”)
私有字符串确认时间;
私人int经验;
@列(name=“无位置”)
私人职位;
@列(name=“请求接收时间”)
私有字符串ReqReceivedTime;
@列(name=“要求技能”)
私人弦乐技巧;
@列(name=“职务”)
私有字符串位置;
私有字符串位置;
@列(name=“status”)
私有字符串状态;
//与资源的双向多对一关联
@OneToMany(mappedBy=“要求”)
私人名单资源;
//二传手和接球手
}
@实体
公共类资源实现可序列化{
私有静态最终长serialVersionUID=1L;
@身份证
@GeneratedValue(策略=GenerationType.IDENTITY)
@列(name=“res_id”)
私有资源ID;
私有字符串位置;
私有字符串名称;
@列(name=“position”)
私有字符串职务;
@列(name=“skills”)
私人弦乐技巧;
私有字符串可用性;
私有字符串状态;
私人整数经验;
//需求的双向多对一关联
@manytone(fetch=FetchType.LAZY,可选=false)
@JoinColumn(name=“req_fk”)
私人需求;
//二传手和接球手
}
@实体
@NamedQuery(name=“Requirement.findAll”,query=“从需求r中选择r”)
公共类要求实现可序列化{
私有静态最终长serialVersionUID=1L;
@身份证
//@GeneratedValue(策略=GenerationType.IDENTITY)
@列(name=“req\u id”)
私有字符串编号;
@列(name=“确认状态”)
私有字符串确认状态;
@列(name=“确认时间”)
私有字符串确认时间;
私人int经验;
@列(name=“无位置”)
私人职位;
@列(name=“请求接收时间”)
私有字符串ReqReceivedTime;
@列(name=“要求技能”)
私人弦乐技巧;
@列(name=“职务”)
私有字符串位置;
私有字符串位置;
@列(name=“status”)
私有字符串状态;
//与资源的双向多对一关联
@OneToMany(mappedBy=“requirement”,cascade=CascadeType.ALL)
私人名单资源;
//二传手和接球手
}
@实体
公共类资源实现可序列化{
私有静态最终长serialVersionUID=1L;
@身份证
@GeneratedValue(策略=GenerationType.IDENTITY)
@列(name=“res_id”)
私有资源ID;
私有字符串位置;
私有字符串名称;
@列(name=“position”)
私有字符串职务;
@列(name=“skills”)
私人弦乐技巧;
私有字符串可用性;
私有字符串状态;
私人整数经验;
//需求的双向多对一关联
@manytone(fetch=FetchType.LAZY,可选=false)
@JoinColumn(name=“req_fk”)
私人需求;
//二传手和接球手
}
@实体
@NamedQuery(name=“Requirement.findAll”,query=“从需求r中选择r”)
公共类要求实现可序列化{
私有静态最终长serialVersionUID=1L;
@身份证
//@GeneratedValue(策略=GenerationType.IDENTITY)
@列(name=“req\u id”)
私有字符串编号;
@列(name=“确认状态”)
私有字符串确认状态;
@列(name=“确认时间”)
私有字符串确认时间;
私人int经验;
@列(name=“无位置”)
私人职位;
@列(name=“请求接收时间”)
私有字符串ReqReceivedTime;
@列(name=“要求技能”)
私人弦乐技巧;
@列(name=“职务”)
私有字符串位置;
私有字符串位置;
@列(name=“status”)
私有字符串状态;
//与资源的双向多对一关联
@OneToMany(mappedBy=“requirement”,cascade=CascadeType.ALL)
私人名单资源;
//二传手和接球手
}
这些都在一个表中现在数据在需求中,资源表中。我们应该使用spring data jpa中的注释生成req_res_status表,我不知道如何使用我仍然不知道您有多少个表,您在这里尝试做什么我有两个表1.需求,2。资源。当我们根据需求更改资源的状态时,一条新记录应该被插入到res_req_status表中(尚未创建)。我应该使用spring数据JPA关系创建res_req_status表
@Entity
public class Resource implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="res_id")
private int resourceId;
private String location;
private String name;
@Column(name="position")
private String jobTitle;
@Column(name="skills")
private String skill;
private String availability;
private String status;
private Integer experience;
//bi-directional many-to-one association to Requirement
@ManyToOne
@JoinColumn(name="req_fk")
private Requirement requirement;
// Setters & Getters
}
@Entity
@NamedQuery(name="Requirement.findAll", query="SELECT r FROM Requirement r")
public class Requirement implements Serializable {
private static final long serialVersionUID = 1L;
@Id
//@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="req_id")
private String reqNumber;
@Column(name="acknowledge_status")
private String acknowledgeStatus;
@Column(name="acknowledge_time")
private String acknowledgeTime;
private int experience;
@Column(name="no_position")
private int noPositions;
@Column(name="req_recieved_time")
private String reqRecievedTime;
@Column(name="req_skills")
private String skill;
@Column(name="job_title")
private String position;
private String location;
@Column(name = "status")
private String status;
//bi-directional many-to-one association to Resource
@OneToMany(mappedBy="requirement")
private List<Resource> resources;
// setters & getters
}
@Entity
public class Resource implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="res_id")
private int resourceId;
private String location;
private String name;
@Column(name="position")
private String jobTitle;
@Column(name="skills")
private String skill;
private String availability;
private String status;
private Integer experience;
//bi-directional many-to-one association to Requirement
@ManyToOne(fetch = FetchType.LAZY, optional = false)
@JoinColumn(name = "req_fk")
private Requirement requirement;
// Setters & Getters
}
@Entity
@NamedQuery(name="Requirement.findAll", query="SELECT r FROM Requirement r")
public class Requirement implements Serializable {
private static final long serialVersionUID = 1L;
@Id
//@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="req_id")
private String reqNumber;
@Column(name="acknowledge_status")
private String acknowledgeStatus;
@Column(name="acknowledge_time")
private String acknowledgeTime;
private int experience;
@Column(name="no_position")
private int noPositions;
@Column(name="req_recieved_time")
private String reqRecievedTime;
@Column(name="req_skills")
private String skill;
@Column(name="job_title")
private String position;
private String location;
@Column(name = "status")
private String status;
//bi-directional many-to-one association to Resource
@OneToMany(mappedBy = "requirement", cascade = CascadeType.ALL)
private List<Resource> resources;
// setters & getters
}