我有两个实体雇员:
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<>();
}
当我从employee获取所有数据时,json返回:
这是正确的,它可以显示员工的项目。
但是当我从项目中获取所有数据时,json返回给我:
员工1有两个项目,它显示了一个,员工2有一个项目,但它只显示ID,我需要该员工的详细信息(至少姓名)
1条答案
按热度按时间toiithl61#
您似乎试图在
Employee
和Project
之间创建双向关系。但是相反,您创建了两个概念上独立的关系,一个从
Employee
到Project
,另一个方向相反,它们恰好写入相同的表,这当然会引起麻烦。解决方法是将其转换为正确的双向关系。
将关系的
Project
端更改为注意,在这个Map中,只有关系的
Employee
端在持久化时会被使用,您必须自己在Java端保持这两端的同步。