[英]jpa many to many getting back data
我有两个实体员工:
public class Employee implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int emp_id;
private String name;
private String email;
private String phone;
@ManyToMany(
fetch = FetchType.LAZY, cascade = CascadeType.ALL
)
@JoinTable(name = "EMP_PRO_DB", joinColumns = {
@JoinColumn(name = "empId", referencedColumnName = "emp_id")
},
inverseJoinColumns = {
@JoinColumn(name = "proId", referencedColumnName = "pro_id")
})
private Set<Project> projects = new HashSet<>();
}
项目:
public class Project {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int pro_id;
private String projectName;
private String projectType;
@JsonIdentityInfo(
generator = ObjectIdGenerators.PropertyGenerator.class,
property = "emp_id"
)
@ManyToMany(
fetch = FetchType.LAZY, cascade = CascadeType.ALL
)
@JoinTable(name = "EMP_PRO_DB", joinColumns = {
@JoinColumn(name = "proId", referencedColumnName = "pro_id")
},
inverseJoinColumns = {
@JoinColumn(name = "empId", referencedColumnName = "emp_id")
})
private Set<Employee> employees = new HashSet<>();
}
这是正确的,它可以向我展示该员工拥有的项目。
员工 1 有两个项目,它显示一个,员工 2 有一个项目但它只显示 ID,我需要该员工的详细信息(至少是姓名)
您似乎试图在Employee
和Project
之间创建双向关系。
但是您创建了两个概念上独立的关系,一个是从Employee
到Project
,另一个是相反的方向,它们恰好写入相同的表。 这当然会引起麻烦。
解决方法是将其转换为适当的双向关系。
将关系的Project
端更改为
@ManyToMany(
fetch = FetchType.LAZY, cascade = CascadeType.ALL, mappedby="projects"
)
private Set<Employee> employees = new HashSet<>();
请注意,使用此映射,在持久化时将仅使用关系的Employee
端。 您必须自己在 Java 端保持两侧同步。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.