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

我有两个实体:Project.javaEmployee.java,它们是相互映射的
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