2016-06-21 73 views
1

我有Spring Boot運行API使用mysql作爲db和@datarest符號(下面的代碼),用於產生Dao's與datarest彈簧時遇到

我有一個結構(estructura),其具有多個步驟(pasos)和一個expediente(檔案或文件),它具有相關的結構,並且必須滿足多個pasos。

@Entity 
    @Table(name="expedientexpaso") 
    public class ExpedientePaso implements Serializable{ 

     private static final long serialVersionUID = 1L; 
     @EmbeddedId 
     private ExpedientePasoPK id; 
     @RestResource(exported=false) 
     @ManyToOne(fetch = FetchType.EAGER, targetEntity = Expediente.class,optional=true, cascade=CascadeType.MERGE) 
     @JoinColumns(value = { 
       @JoinColumn(name = "expediente", referencedColumnName = "id", insertable = false, updatable = false, nullable = false)}) 
     private Expediente expediente; 
     @RestResource(exported=false) 
     @ManyToOne(fetch = FetchType.EAGER, targetEntity = Paso.class,optional=true, cascade=CascadeType.MERGE) 
     @JoinColumns(value = { 
       @JoinColumn(name = "paso", referencedColumnName = "id", insertable = false, updatable = false, nullable = false)}) 
     private Paso paso; 
     @Column(name="completo") 
     private Boolean completo; 
     @Column(name="fecha_completa") 
     private Date fechaCompleta; 
     @JsonIgnore 
     @Column(name = "fecha_carga") 
     private Date fechaCarga; 
     @JsonIgnore 
     @Column(name = "fecha_mod") 
     private Date fechaMod; 
     @JsonIgnore 
     @RestResource(exported=false) 
     @ManyToOne(cascade = CascadeType.MERGE) 
     @JoinColumn(name = "usuario_carga", referencedColumnName = "id") 
     private Usuario usuarioCarga; 
     @JsonIgnore 
     @RestResource(exported=false) 
     @ManyToOne(cascade = CascadeType.MERGE) 
     @JoinColumn(name = "usuario_mod", referencedColumnName = "id") 
     private Usuario usuarioMod; 
     public ExpedientePasoPK getId() { 
      return id; 
     } 
     public void setId(ExpedientePasoPK id) { 
      this.id = id; 
     } 
     public Expediente getExpediente() { 
      return expediente; 
     } 
     public void setExpediente(Expediente expediente) { 
      this.expediente = expediente; 
     } 
     public Paso getPaso() { 
      return paso; 
     } 
     public void setPaso(Paso paso) { 
      this.paso = paso; 
     } 
     public Boolean getCompleto() { 
      return completo; 
     } 
     public void setCompleto(Boolean completo) { 
      this.completo = completo; 
     } 
     public Date getFechaCompleta() { 
      return fechaCompleta; 
     } 
     public void setFechaCompleta(Date fechaCompleta) { 
      this.fechaCompleta = fechaCompleta; 
     } 
     public Date getFechaCarga() { 
      return fechaCarga; 
     } 
     public void setFechaCarga(Date fechaCarga) { 
      this.fechaCarga = fechaCarga; 
     } 
     public Date getFechaMod() { 
      return fechaMod; 
     } 
     public void setFechaMod(Date fechaMod) { 
      this.fechaMod = fechaMod; 
     } 
     public Usuario getUsuarioCarga() { 
      return usuarioCarga; 
     } 
     public void setUsuarioCarga(Usuario usuarioCarga) { 
      this.usuarioCarga = usuarioCarga; 
     } 
     public Usuario getUsuarioMod() { 
      return usuarioMod; 
     } 
     public void setUsuarioMod(Usuario usuarioMod) { 
      this.usuarioMod = usuarioMod; 
     } 
     @Override 
     public int hashCode() { 
      final int prime = 31; 
      int result = 1; 
      result = prime * result + ((completo == null) ? 0 : completo.hashCode()); 
      result = prime * result + ((fechaCompleta == null) ? 0 : fechaCompleta.hashCode()); 
      result = prime * result + ((id == null) ? 0 : id.hashCode()); 
      return result; 
     } 
     @Override 
     public boolean equals(Object obj) { 
      if (this == obj) 
       return true; 
      if (obj == null) 
       return false; 
      if (getClass() != obj.getClass()) 
       return false; 
      ExpedientePaso other = (ExpedientePaso) obj; 
      if (completo == null) { 
       if (other.completo != null) 
        return false; 
      } else if (!completo.equals(other.completo)) 
       return false; 
      if (fechaCompleta == null) { 
       if (other.fechaCompleta != null) 
        return false; 
      } else if (!fechaCompleta.equals(other.fechaCompleta)) 
       return false; 
      if (id == null) { 
       if (other.id != null) 
        return false; 
      } else if (!id.equals(other.id)) 
       return false; 
      return true; 
     } 

    } 

即使世界,讓我錯誤,這裏的類掛鉤類,第一expediente類

@Entity 
    @Table(name = "expediente") 
    public class Expediente implements Serializable { 

     private static final long serialVersionUID = 1L; 
     @Id 
     @JsonIgnore 
     @JsonBackReference 
     @GeneratedValue 
     @Column(name = "id") 
     private Long id; 
     @Column(name = "numero_expediente") 
     private String numeroExpediente; 
     @RestResource(exported=false) 
     @ManyToOne(cascade = CascadeType.MERGE) 
     @JoinColumn(name = "beneficiario", referencedColumnName = "id") 
     private Beneficiario beneficiario; 
     @RestResource(exported=false) 
     @ManyToOne(cascade = CascadeType.MERGE) 
     @JoinColumn(name = "estructura", referencedColumnName = "id") 
     private Estructura estructura; 
     @RestResource(exported=false) 
     @ManyToOne(cascade = CascadeType.MERGE) 
     @JoinColumn(name = "franquicia", referencedColumnName = "id") 
     private Franquicia franquicia; 
     @RestResource(exported=false) 
     @ManyToOne(cascade = CascadeType.MERGE) 
     @JoinColumn(name = "solicitud", referencedColumnName = "id") 
     private Solicitud solicitud; 
     @RestResource(exported=false) 
     @ManyToOne(cascade = CascadeType.MERGE) 
     @JoinColumn(name = "disposicion", referencedColumnName = "id") 
     private Disposicion disposicion; 
     @Column(name = "fecha_carga") 
     private Date fechaCarga; 
     @Column(name = "fecha_mod") 
     private Date fechaMod; 
     @RestResource(exported=false) 
     @ManyToOne(cascade = CascadeType.MERGE) 
     @JoinColumn(name = "usuario_carga", referencedColumnName = "id") 
     private Usuario usuarioCarga; 
     @RestResource(exported=false) 
     @ManyToOne(cascade = CascadeType.MERGE) 
     @JoinColumn(name = "usuario_mod", referencedColumnName = "id") 
     private Usuario usuarioMod; 
     @OneToMany(fetch = FetchType.EAGER, mappedBy = "expediente",cascade=CascadeType.ALL) 
     @RestResource(exported=false) 
     private Set<ExpedientePaso> expedientePasos = new HashSet<ExpedientePaso>(); 

     public Long getId() { 
      return id; 
     } 
     public void setId(Long id) { 
      this.id = id; 
     } 
     public Beneficiario getBeneficiario() { 
      return beneficiario; 
     } 
     public String getNumeroExpediente() { 
      return numeroExpediente; 
     } 
     public void setNumeroExpediente(String numeroExpediente) { 
      this.numeroExpediente = numeroExpediente; 
     } 
     public void setBeneficiario(Beneficiario beneficiario) { 
      this.beneficiario = beneficiario; 
     } 
     public Estructura getEstructura() { 
      return estructura; 
     } 
     public void setEstructura(Estructura estructura) { 
      this.estructura = estructura; 
     } 
     public Franquicia getFranquicia() { 
      return franquicia; 
     } 
     public void setFranquicia(Franquicia franquicia) { 
      this.franquicia = franquicia; 
     } 
     public Solicitud getSolicitud() { 
      return solicitud; 
     } 
     public void setSolicitud(Solicitud solicitud) { 
      this.solicitud = solicitud; 
     } 
     public Date getFechaCarga() { 
      return fechaCarga; 
     } 
     public void setFechaCarga(Date fechaCarga) { 
      this.fechaCarga = fechaCarga; 
     } 
     public Date getFechaMod() { 
      return fechaMod; 
     } 
     public void setFechaMod(Date fechaMod) { 
      this.fechaMod = fechaMod; 
     } 
     public Usuario getUsuarioCarga() { 
      return usuarioCarga; 
     } 
     public void setUsuarioCarga(Usuario usuarioCarga) { 
      this.usuarioCarga = usuarioCarga; 
     } 
     public Usuario getUsuarioMod() { 
      return usuarioMod; 
     } 
     public void setUsuarioMod(Usuario usuarioMod) { 
      this.usuarioMod = usuarioMod; 
     } 
     public Disposicion getDisposicion() { 
      return disposicion; 
     } 
     public void setDisposicion(Disposicion disposicion) { 
      this.disposicion = disposicion; 
     } 
     public Set<ExpedientePaso> getExpedientePasos() { 
      return expedientePasos; 
     } 
     public void setExpedientePasos(Set<ExpedientePaso> expedientePasos) { 
      this.expedientePasos = expedientePasos; 
     } 
     @Override 
     public int hashCode() { 
      final int prime = 31; 
      int result = 1; 
      result = prime * result + ((numeroExpediente == null) ? 0 : numeroExpediente.hashCode()); 
      return result; 
     } 
     @Override 
     public boolean equals(Object obj) { 
      if (this == obj) 
       return true; 
      if (obj == null) 
       return false; 
      if (getClass() != obj.getClass()) 
       return false; 
      Expediente other = (Expediente) obj; 
      if (numeroExpediente == null) { 
       if (other.numeroExpediente != null) 
        return false; 
      } else if (!numeroExpediente.equals(other.numeroExpediente)) 
       return false; 
      return true; 
     } 

    } 

這裏的帕索類:

最後這裏的estructura類:

@Entity 
    @Table(name = "estructura") 
    public class Estructura implements Serializable { 

     private static final long serialVersionUID = 1L; 
     @Id 
     @JsonIgnore 
     @GeneratedValue 
     @Column(name = "id") 
     private Long id; 
     @Column(name = "estructura") 
     private String estructura; 
     @Column(name = "fecha_carga") 
     private Date fechaCarga; 
     @Column(name = "fecha_mod") 
     private Date fechaMod; 
     @JsonManagedReference 
     @RestResource(exported=false) 
     @OneToMany(mappedBy = "estructura", fetch = FetchType.EAGER, orphanRemoval = true, cascade = CascadeType.ALL) 
     private List<Paso> pasos = new ArrayList<Paso>(); 
     @RestResource(exported=false) 
     @ManyToOne(cascade = CascadeType.MERGE) 
     @JoinColumn(name = "usuario_carga", referencedColumnName = "id") 
     private Usuario usuarioCarga; 
     @RestResource(exported=false) 
     @ManyToOne(cascade = CascadeType.MERGE) 
     @JoinColumn(name = "usuario_mod", referencedColumnName = "id") 
     private Usuario usuarioMod; 

     public Long getId() { 
      return id; 
     } 
     public void setId(Long id) { 
      this.id = id; 
     } 
     public String getEstructura() { 
      return estructura; 
     } 
     public void setEstructura(String estructura) { 
      this.estructura = estructura; 
     } 
     public Date getFechaCarga() { 
      return fechaCarga; 
     } 
     public void setFechaCarga(Date fechaCarga) { 
      this.fechaCarga = fechaCarga; 
     } 
     public Date getFechaMod() { 
      return fechaMod; 
     } 
     public void setFechaMod(Date fechaMod) { 
      this.fechaMod = fechaMod; 
     } 
     public Usuario getUsuarioCarga() { 
      return usuarioCarga; 
     } 
     public void setUsuarioCarga(Usuario usuarioCarga) { 
      this.usuarioCarga = usuarioCarga; 
     } 
     public Usuario getUsuarioMod() { 
      return usuarioMod; 
     } 
     public void setUsuarioMod(Usuario usuarioMod) { 
      this.usuarioMod = usuarioMod; 
     } 
     public List<Paso> getPasos() { 
      return pasos; 
     } 
     public void setPasos(List<Paso> pasos) { 
      this.pasos = pasos; 
     } 
     @Override 
     public int hashCode() { 
      final int prime = 31; 
      int result = 1; 
      result = prime * result + ((estructura == null) ? 0 : estructura.hashCode()); 
      return result; 
     } 
     @Override 
     public boolean equals(Object obj) { 
      if (this == obj) 
       return true; 
      if (obj == null) 
       return false; 
      if (getClass() != obj.getClass()) 
       return false; 
      Estructura other = (Estructura) obj; 
      if (estructura == null) { 
       if (other.estructura != null) 
        return false; 
      } else if (!estructura.equals(other.estructura)) 
       return false; 
      return true; 
     } 

    } 

這裏的錯誤,我知道這是一個遞歸,但不知道如何解決它,我很新Data Rest,所以任何幫助將不勝感激。

錯誤:

{"timestamp":1466523913292,"status":500,"error":"Internal Server Error","exception":"org.springframework.http.converter.HttpMessageNotWritableException","message":"org.springframework.http.converter.HttpMessageNotWritableException: Could not write content: Infinite recursion (StackOverflowError) (through reference chain: org.springframework.hateoas.PagedResources[\"_embedded\"]); nested exception is com.fasterxml.jackson.databind.JsonMappingException: Infinite recursion (StackOverflowError) (through reference chain: org.springframework.hateoas.PagedResources[\"_embedded\"])","path":"/expedientePaso/"} 

回答