弹簧 JPA - 如何从自连接表输出有限的字段

我有一个名为“员工”的实体,它与自己有联系。联接表示谁是该员工的经理。当我查询记录时,我得到了员工的整个层次结构。

我希望实现的是只获取经理的几个字段,而不希望获取员工的经理的经理。

我尝试使用但无法获得预期的输出来执行此操作。也使用过。@NamedEntityGraphProjections

我还尝试了这里提到的方法

  1. JPA 使用连接表进行自连接

  2. 自加盟春联欢

注意 - 我不想使用注释@Query

@Entity

public class Employee {

    @Id

    @Column(name = "employeeId", nullable = false)

    private String employeeId;


    @Column(name = "firstName", nullable = false)

    private String firstName;


    @Column(name = "lastName", nullable = false)

    private String lastName;


    @Column(name = "middleName")

    private String middleName;


    @Column(name = "dateOfJoining", nullable = false)

    private LocalDate dateOfJoining;


    @ManyToOne(cascade = CascadeType.ALL)

    @JoinColumn(name = "line_manager_id")

    private Employee manager;


}


实际结果 -


{

   "firstName":"Super",

   "lastName":"Manager",

   "middleName":"",

   "dateOfJoining":"2012-12-31",

   "manager":{

      "firstName":"Super",

      "lastName":"Manager",

      "middleName":"",

      "dateOfJoining":"2012-12-31",

      "manager":{

         "firstName":"Admin",

         "lastName":"User",

         "middleName":"",

         "dateOfJoining":"2012-12-31",

         "manager":{

            "firstName":"Admin",

            "lastName":"User",

            "middleName":"",

            "dateOfJoining":"2012-12-31",

            "manager": null,

            "employeeId":"P67"

         },

         "employeeId":"P68"

      },

      "employeeId":"P69"

   },

   "employeeId":"P70"

}

预期成果



{

   "firstName":"Super",

   "lastName":"Manager",

   "middleName":"",

   "dateOfJoining":"2012-12-31",

   "manager":{

      "firstName":"Super",

      "lastName":"Manager",

      "employeeId":"P69"

   },

   "employeeId":"P70"

}


烙印99
浏览 60回答 2
2回答

炎炎设计

您应该在不希望包含的字段中使用注释。查看此处和此处以获取更多信息。@JsonIgnore

慕丝7291255

try using lazy load@ManyToOne(fetch=FetchType.LAZY)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java