为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

烙印99 2022-09-22 19:57:49

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

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

我尝试使用但无法获得预期的输出来执行此操作。也使用过。@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"

}


查看完整描述

2 回答

?
炎炎设计

TA贡献1484条经验 获得超3个赞

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



查看完整回答
反对 回复 6天前
?
慕丝7291255

TA贡献1504条经验 获得超6个赞

try using lazy load

@ManyToOne(fetch=FetchType.LAZY)


查看完整回答
反对 回复 6天前

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信