Java 现有多个中需要的新实体
我有两个实体:Project.java和Employee.java,它们是相互映射的Java 现有多个中需要的新实体,java,spring,spring-boot,jpa,hibernate-mapping,Java,Spring,Spring Boot,Jpa,Hibernate Mapping,我有两个实体:Project.java和Employee.java,它们是相互映射的manytomy(内部使用Hibernate生成的表emp\u Project\u映射) 现在,我有了一个新角色:Role.java,它将与上述实体进行映射,以便项目中的员工只能有一个角色。此外,此映射应使用相同的映射表emp\u项目映射 我不知道如何实现这种情况。请帮帮我 Employee.java package com.ayush.springbootApp.bootCrudApi.model; impo
manytomy
(内部使用Hibernate生成的表emp\u Project\u映射)
现在,我有了一个新角色:Role.java,它将与上述实体进行映射,以便项目中的员工只能有一个角色。此外,此映射应使用相同的映射表emp\u项目映射
我不知道如何实现这种情况。请帮帮我
Employee.java
package com.ayush.springbootApp.bootCrudApi.model;
import java.util.Date;
import java.util.HashSet;
import java.util.Set;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinTable;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToMany;
import javax.persistence.OneToOne;
import javax.persistence.Table;
import com.ayush.springbootApp.bootCrudApi.model.Project;
import com.ayush.springbootApp.bootCrudApi.model.Workstation;
@Entity
@Table (name="employee_table")
//model class for Employee
public class Employee {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column
private Integer id;
@Column
private String name;
@Column
private String gender;
@Column
private String department;
@Column
private String designation;
@Column
private Date dob;
@Column(name="empcode",nullable=false,unique=true)
private String empCode;
@OneToOne(mappedBy="emp")
private Workstation workStation;
@ManyToMany
@JoinTable(name="emp_project_mapping",joinColumns=@JoinColumn(name="emp_id"),inverseJoinColumns=@JoinColumn(name="project_id"))
private Set<Project> prj=new HashSet<Project>();
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public String getDepartment() {
return department;
}
public void setDepartment(String department) {
this.department = department;
}
public String getDesignation() {
return designation;
}
public void setDesignation(String designation) {
this.designation = designation;
}
public Date getDob() {
return dob;
}
public void setDob(Date dob) {
this.dob = dob;
}
public String getEmpCode() {
return empCode;
}
public void setEmpCode(String empCode) {
this.empCode = empCode;
}
public Set<Project> getProject()
{
return this.prj;
}
public void setProject(Set<Project> prj)
{
this.prj=prj;
}
@Override
public String toString() {
return "Employee [id=" + id + ", code="+ empCode + ", name=" + name + ", gender=" + gender + ", department=" + department
+ ", designation=" + designation + ", dob=" + dob + "]";
}
}
package com.ayush.springbootApp.bootCrudApi.model;
import java.util.HashSet;
import java.util.Set;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.ManyToMany;
import javax.persistence.Table;
import com.ayush.springbootApp.bootCrudApi.model.Employee;
@Entity
@Table(name="projects_table")
public class Project{
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column
private Integer id;
@Column(nullable=false)
private String oea_number;
@Column(nullable=false)
private String project_name;
@Column
private String client_name;
@Column
private String origin_country;
@Column(nullable=false)
private Integer po_amount;
@Column
private int project_active;
@ManyToMany(mappedBy="prj")
private Set<Employee> emp=new HashSet<Employee>();
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getOea_number() {
return oea_number;
}
public void setOea_number(String oea_number) {
this.oea_number = oea_number;
}
public String getProject_name() {
return project_name;
}
public void setProject_name(String project_name) {
this.project_name = project_name;
}
public String getClient_name() {
return client_name;
}
public void setClient_name(String client_name) {
this.client_name = client_name;
}
public String getOrigin_country() {
return origin_country;
}
public void setOrigin_country(String origin_country) {
this.origin_country = origin_country;
}
public Integer getPo_amount() {
return po_amount;
}
public void setPo_amount(Integer po_amount) {
this.po_amount = po_amount;
}
public int getProject_active()
{
return this.project_active;
}
public void setProject_active(int project_active)
{
this.project_active=project_active;
}
public Set<Employee> getEmployee()
{
return this.emp;
}
public void setEmployee(Set<Employee> emp)
{
this.emp=emp;
}
@Override
public String toString() {
return "Project [id=" + id + ", oea_number=" + oea_number + ", project_name=" + project_name + ", client_name="
+ client_name + ", origin_country=" + origin_country + ", po_amount=" + po_amount + "]";
}
}
package com.ayush.springbootApp.bootCrudApi.model;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.OneToOne;
import javax.persistence.Table;
@Entity
@Table(name="Employee_roles")
public class Role
{
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Integer id;
@Column(name="description",nullable=false)
private String desc;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getDesc() {
return desc;
}
public void setDesc(String desc) {
this.desc = desc;
}
}
emp_项目_映射表
emp\u项目映射
不能再是“纯多对多关系表”。现在,您需要在新的实体中包含所需的属性:Employee
、Role
和Project
(所有这些属性都应该是manytone
)。另一方面,删除Employee
和Project
中的manytomy
属性,要获取此类信息,最好的选择是在其Dao/repository中使用特定方法这是否回答了您的问题@阿列克斯鲁登科:不,没有。我已经看到了这个问题,但它不能满足两个多个映射表的一对一映射的条件。@博士,你能用代码描述你建议的解决方案吗?@AlexRudenko提供了一个我建议的解决方案的示例。保留现有的manytomy
关系并将其包含在添加角色的“新关系”中更为复杂。创建一个包含所有这些属性的新实体(删除当前的manytomy
)将实现您需要的目标,只需考虑PK的所有属性:Employee
、Project
和Role
。