Spring-JPA - 如何从Self Joined表输出有限的字段

问题描述 投票:1回答:2

我有一个名为employee的实体,它自己加入了自己。加入是代表谁是该员工的经理。当我查询记录时,我得到了员工的整个层次结构。

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

我尝试使用@NamedEntityGraph但无法获得预期的输出。二手Projections也是如此。

我也试过这里提到的方法

  1. JPA Self Join using JoinTable
  2. Self join Spring JPA

注意 - 我不想使用@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"
}

java hibernate spring-data-jpa
2个回答
1
投票

您应该在不希望包含的字段中使用@JsonIgnore注释。查看herehere了解更多信息。


0
投票

尝试使用延迟加载

@ManyToOne(fetch=FetchType.LAZY)
© www.soinside.com 2019 - 2024. All rights reserved.