我在Employee
之间有多对多关系和SkillSet
表,每个关系都有附加列 numberOfYears
employeeId skillSetId numberOfYears
10 101 2
我是 JPA 新手,无法定义具有关系的实体。我应该为 Employee_SkillSet
定义一个新的实体类吗? table ?或者我可以在 Employee
中定义多对多关系吗?和SkillSet
类(class)?我在哪里指定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
}
}
关于java - JPA:使用附加属性映射多对多关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34004718/