无法从 Spring Hibernate 获取 json 中的 manytoone 映射对象

unable to get manytoone mapping object in json, from Spring Hibernate

员工 CLASS

@Entity
@Table(name = "staff", catalog = "nibblrdw_collections")

public class Staff implements java.io.Serializable {

    private Integer id;
    private StafRole stafRole;
    private String stfId;
    @NotEmpty(message="please enter staff name")
    private String stfName;
    @NotEmpty(message="please enter staff Username")
    @Size(min = 6, max = 15, message = "Lenght must be between 6 to 15 characters")
    private String stfUsrName;
    @NotEmpty(message="please enter staff password")
    @Size(min = 6, max = 10, message = "Lenght must be between 6 to 10 characters")
    private String stfUsrPwd;
    private boolean stfVisF;
    private Date crtTs;
    private Date updTs;
    private String crtId;
    private String updId;
    @NotNull(message="please enter Staff Device ID")
    private Integer deviceId;

    @Id
    @GeneratedValue(strategy = IDENTITY)
    @Column(name = "id", unique = true, nullable = false)
    public Integer getId() {
        return this.id;
    }

    public void setId(Integer id) {
        this.id = id;
    }
    @JsonBackReference
    @ManyToOne(fetch = FetchType.EAGER)
    @JoinColumn(name = "stf_role", nullable = false)
    public StafRole getStafRole() {
        return this.stafRole;
    }

    public void setStafRole(StafRole stafRole) {
        this.stafRole = stafRole;
    }

    @Column(name = "stf_id", nullable = false)
    public String getStfId() {
        return this.stfId;
    }

    public void setStfId(String stfId) {
        this.stfId = stfId;
    }

    @Column(name = "stf_name", nullable = false, length = 65535)
    public String getStfName() {
        return this.stfName;
    }

    public void setStfName(String stfName) {
        this.stfName = stfName;
    }

    @Column(name = "stf_usr_name", length = 100)
    public String getStfUsrName() {
        return this.stfUsrName;
    }

    public void setStfUsrName(String stfUsrName) {
        this.stfUsrName = stfUsrName;
    }

    @Column(name = "stf_usr_pwd", length = 100)
    public String getStfUsrPwd() {
        return this.stfUsrPwd;
    }

    public void setStfUsrPwd(String stfUsrPwd) {
        this.stfUsrPwd = stfUsrPwd;
    }

    @Column(name = "stf_vis_f", nullable = false)
    public boolean isStfVisF() {
        return this.stfVisF;
    }

    public void setStfVisF(boolean stfVisF) {
        this.stfVisF = stfVisF;
    }

    @Temporal(TemporalType.TIMESTAMP)
    @Column(name = "crt_ts", nullable = false, length = 0)
    public Date getCrtTs() {
        return this.crtTs;
    }

    public void setCrtTs(Date crtTs) {
        this.crtTs = crtTs;
    }

    @Temporal(TemporalType.TIMESTAMP)
    @Column(name = "upd_ts", nullable = false, length = 0)
    public Date getUpdTs() {
        return this.updTs;
    }

    public void setUpdTs(Date updTs) {
        this.updTs = updTs;
    }

    @Column(name = "crt_id", nullable = false, length = 100)
    public String getCrtId() {
        return this.crtId;
    }

    public void setCrtId(String crtId) {
        this.crtId = crtId;
    }

    @Column(name = "upd_id", length = 100)
    public String getUpdId() {
        return this.updId;
    }

    public void setUpdId(String updId) {
        this.updId = updId;
    }

    @Column(name = "device_id", nullable = false)
    public Integer getDeviceId() {
        return this.deviceId;
    }

    public void setDeviceId(Integer deviceId) {
        this.deviceId = deviceId;
    }

}

员工类型class

@Entity

@Table(name = "staf_role", catalog = "nibblrdw_collections")
public class StafRole implements java.io.Serializable {

    private Integer id;
    private String roleDesc;
    private String crtId;
    private Date crtTs;
    private String updId;
    private Date updTs;
    private Set<Staff> staffs = new HashSet<Staff>(0);

    @Id
    @GeneratedValue(strategy = IDENTITY)
    @Column(name = "id", unique = true, nullable = false)
    public Integer getId() {
        return this.id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    @Column(name = "role_desc", nullable = false, length = 45)
    public String getRoleDesc() {
        return this.roleDesc;
    }

    public void setRoleDesc(String roleDesc) {
        this.roleDesc = roleDesc;
    }

    @Column(name = "crt_id", length = 45)
    public String getCrtId() {
        return this.crtId;
    }

    public void setCrtId(String crtId) {
        this.crtId = crtId;
    }

    @Temporal(TemporalType.TIMESTAMP)
    @Column(name = "crt_ts", nullable = false, length = 0)
    public Date getCrtTs() {
        return this.crtTs;
    }

    public void setCrtTs(Date crtTs) {
        this.crtTs = crtTs;
    }

    @Column(name = "upd_id", length = 45)
    public String getUpdId() {
        return this.updId;
    }

    public void setUpdId(String updId) {
        this.updId = updId;
    }

    @Temporal(TemporalType.TIMESTAMP)
    @Column(name = "upd_ts", nullable = false, length = 0)
    public Date getUpdTs() {
        return this.updTs;
    }

    public void setUpdTs(Date updTs) {
        this.updTs = updTs;
    }

    @JsonManagedReference
    @OneToMany(fetch = FetchType.EAGER, mappedBy = "stafRole")
    public Set<Staff> getStaffs() {
        return this.staffs;
    }

    public void setStaffs(Set<Staff> staffs) {
        this.staffs = staffs;
    }

}

控制器

@RequestMapping(value="loginmob", method = RequestMethod.GET)



  public @ResponseBody Object test() {  
    LoginModel login=new LoginModel();
    login.setName("report");
    login.setPassword("report123");
     JSONObject obj = new JSONObject();
    if(!login.getName().isEmpty()  & !login.getPassword().isEmpty()){
        Staff staff=((StaffHomeService) staffService).login(login.getName(), login.getPassword());
        System.out.println(staff.getStfUsrName()+"   "+staff.getStfUsrPwd());
        //logs exception
        if(staff.getStfUsrName()!=null){
             StafRole sr=staff.getStafRole();
             System.out.println(sr.getRoleDesc());
             obj.put("id", staff.getId());
             obj.put("stf_name", staff.getStfName());
             return staff; 
        }
        }
    return obj;
    }

JSON URL

中的对象
{"id":2,"stfId":"2","stfName":"Admin","stfUsrName":"report","stfUsrPwd":"report123","stfVisF":true,"crtTs":1421048214000,"updTs":1422471300000,"crtId":"admin","updId":"null","deviceId":1}

我的问题是 StafTyp 没有序列化到 json 对象。需要做哪些更改才能使 StafTyp 对象达到 Json?

您在 StaffStaffRole 上切换了 JSON 注释。

Staff#getStafRole()应该注解为@JsonManagedReferenceStafRole#getStaffs()应该注解为@JsonBackReference。这样staff -> stafRole会序列化为JSON,而staff -> staffRole -> staffs不会,这就是你需要的