This question already has answers here:
JPA many to many with extra column
                                
                                    (3个答案)
                                
                        
                4年前关闭。
            
        

我在EmployeeSkillSet表之间有多对多关系,每个关系都有额外的列numberOfYears

employeeId  skillSetId  numberOfYears
10          101         2


我是JPA的新手,无法定义具有关系的实体。我应该为Employee_SkillSet表定义一个新的实体类吗?还是可以在EmployeeSkillSet类中定义很多对很多的关系?我在哪里指定numberOfYears列?

编辑:似乎重复,但是我有明确的要求要使用@IdClass,并且实体之一是@MappedSuperclass,因此必须定义ID实例和引用的实体对象。

最佳答案

由于您需要元组的另一个字段(Employee,SkillSet),因此您必须创建另一个实体。

@Entity
public class Employee implements Serializable {
    private @Id Long id;

    @OneToMany(mappedBy="employee")
    private List<EmployeeSkillSet> skillSets;
}

@Entity
public class SkillSet implements Serializable {
    private @Id Long id;
}

@Entity
public class EmployeeSkillSet implements Serializable {
    private @Id Long id;
    private @ManyToOne Employee employee;
    private @ManyToOne SkillSet skillSet;
    private @Basic int numberOfYears;
}


当然,您可以选择使用@IdClass来使(“ employee”,“ skillSet”)成为EmployeeSkillSet的主键,如下所示:

@Entity @IdClass(EmployeeSkillSet.Key.class)
public class EmployeeSkillSet implements Serializable {

    private @Id @ManyToOne Employee employee;
    private @Id @ManyToOne SkillSet skillSet;
    private @Basic int numberOfYears;

    public static class Key implements Serializable {
        private Long employee; // plus getter+setter
        private Long skillSet; // plus getter+setter
        // plus hashCode, equals
    }
}

10-05 20:12