繁体   English   中英

jpa 多对多取回数据

[英]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<>();
}

当我从员工那里获取所有数据时,json 返回给我: 在此处输入图像描述

这是正确的,它可以向我展示该员工拥有的项目。

但是当我从项目中获取所有数据时,json 返回给我: 在此处输入图像描述

员工 1 有两个项目,它显示一个,员工 2 有一个项目但它只显示 ID,我需要该员工的详细信息(至少是姓名)

您似乎试图在EmployeeProject之间创建双向关系。

但是您创建了两个概念上独立的关系,一个是从EmployeeProject ,另一个是相反的方向,它们恰好写入相同的表。 这当然会引起麻烦。

解决方法是将其转换为适当的双向关系。

将关系的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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM