gpt4 book ai didi

java - JPA:使用附加属性映射多对多关系

转载 作者:行者123 更新时间:2023-12-02 04:08:45 26 4
gpt4 key购买 nike

我在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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com