успокоительные обманные ключи foraneas

Финал Estoy haciendo el proyecto y танго ООН servico веб-успокоительный creado en Netbeans que utiliza una base de datos, удаленный слуга ООН Glassfish. Основа Tenemos que crear dos apps una escritorio y la otra Android en las que se pueda manipular/consultar en esta de datos. Шаг скрутки Entre las tablas de la base de datos relaciones, ключи foraneas. Cuando recupero, довод "против" получает y en formato json, la таблица incidencias que tiene 5 ключей foraneas, меня arrastra todos Лос Кампус de dichas таблицы. Y эй соло quiero Лос идентификатор de esos registros.

La clase персистентный es esta:

package entities;

import com.fasterxml.jackson.annotation.JsonView;
import java.io.Serializable;
import java.util.Collection;
import java.util.Date;
import javax.persistence.Basic;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.validation.constraints.Size;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlTransient;
import utils.Views;

/**
 * Classe persistent
 * @author Montse Camps
 */
@Entity
@Table(name = "incidencies")
@XmlRootElement
@NamedQueries({
    @NamedQuery(name = "Incidencies.findAll", query = "SELECT i FROM Incidencies i")
    , @NamedQuery(name = "Incidencies.findById", query = "SELECT i FROM Incidencies i WHERE i.id = :id")
    , @NamedQuery(name = "Incidencies.findByDataIncidencia", query = "SELECT i FROM Incidencies i WHERE i.dataIncidencia = :dataIncidencia")
    , @NamedQuery(name = "Incidencies.findByDataInici", query = "SELECT i FROM Incidencies i WHERE i.dataInici = :dataInici")
    , @NamedQuery(name = "Incidencies.findByDataFi", query = "SELECT i FROM Incidencies i WHERE i.dataFi = :dataFi")
    , @NamedQuery(name = "Incidencies.findByDescCurta", query = "SELECT i FROM Incidencies i WHERE i.descCurta = :descCurta")
    , @NamedQuery(name = "Incidencies.findByDescLlarga", query = "SELECT i FROM Incidencies i WHERE i.descLlarga = :descLlarga")})
public class Incidencies implements Serializable {

    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Basic(optional = false)
    @Column(name = "id")
    private Integer id;

    @Column(name = "data_incidencia")
    @Temporal(TemporalType.DATE)
    private Date dataIncidencia;

    @Column(name = "data_inici")
    @Temporal(TemporalType.DATE)
    private Date dataInici;

    @Column(name = "data_fi")
    @Temporal(TemporalType.DATE)
    private Date dataFi;

    @Size(max = 15)
    @Column(name = "desc_curta")
    private String descCurta;

    @Size(max = 300)
    @Column(name = "desc_llarga")
    private String descLlarga;

    @OneToMany(mappedBy = "idIncidencia")
    private Collection<Notes> notesCollection;

    @OneToMany(mappedBy = "idIncidencia")
    private Collection<Imatges> imatgesCollection;

    @JoinColumn(name = "id_estat", referencedColumnName = "id")
    @ManyToOne
    private Estats idEstat;

    @JoinColumn(name = "id_localitzacio", referencedColumnName = "id")
    @ManyToOne
    private Localitzacions idLocalitzacio;

    @JoinColumn(name = "id_prioritat", referencedColumnName = "id")
    @ManyToOne
    private Prioritat idPrioritat;

    @JoinColumn(name = "id_usuari_obertura", referencedColumnName = "id")
    @ManyToOne
    private Usuari idUsuariObertura;

    @JoinColumn(name = "id_usuari_operari", referencedColumnName = "id")
    @ManyToOne
    private Usuari idUsuariOperari;

    @OneToMany(mappedBy = "idIncidencia")
    private Collection<MaterialIncidencies> materialIncidenciesCollection;

    public Incidencies() {
    }

    public Incidencies(Integer id) {
        this.id = id;
    }

    public Integer getId() {
        return id;
    }

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

    public Date getDataIncidencia() {
        return dataIncidencia;
    }

    public void setDataIncidencia(Date dataIncidencia) {
        this.dataIncidencia = dataIncidencia;
    }

    public Date getDataInici() {
        return dataInici;
    }

    public void setDataInici(Date dataInici) {
        this.dataInici = dataInici;
    }

    public Date getDataFi() {
        return dataFi;
    }

    public void setDataFi(Date dataFi) {
        this.dataFi = dataFi;
    }

    public String getDescCurta() {
        return descCurta;
    }

    public void setDescCurta(String descCurta) {
        this.descCurta = descCurta;
    }

    public String getDescLlarga() {
        return descLlarga;
    }

    public void setDescLlarga(String descLlarga) {
        this.descLlarga = descLlarga;
    }

    @XmlTransient
    public Collection<Notes> getNotesCollection() {
        return notesCollection;
    }

    public void setNotesCollection(Collection<Notes> notesCollection) {
        this.notesCollection = notesCollection;
    }

    @XmlTransient
    public Collection<Imatges> getImatgesCollection() {
        return imatgesCollection;
    }

    public void setImatgesCollection(Collection<Imatges> imatgesCollection) {
        this.imatgesCollection = imatgesCollection;
    }

    public Estats getIdEstat() {
        return idEstat;
    }

    public void setIdEstat(Estats idEstat) {
        this.idEstat = idEstat;
    }

    public Localitzacions getIdLocalitzacio() {
        return idLocalitzacio;
    }

    public void setIdLocalitzacio(Localitzacions idLocalitzacio) {
        this.idLocalitzacio = idLocalitzacio;
    }

    public Prioritat getIdPrioritat() {
        return idPrioritat;
    }

    public void setIdPrioritat(Prioritat idPrioritat) {
        this.idPrioritat = idPrioritat;
    }

    public Usuari getIdUsuariObertura() {
        return idUsuariObertura;
    }

    public void setIdUsuariObertura(Usuari idUsuariObertura) {
        this.idUsuariObertura = idUsuariObertura;
    }

    public Usuari getIdUsuariOperari() {
        return idUsuariOperari;
    }

    public void setIdUsuariOperari(Usuari idUsuariOperari) {
        this.idUsuariOperari = idUsuariOperari;
    }

    @XmlTransient
    public Collection<MaterialIncidencies> getMaterialIncidenciesCollection() {
        return materialIncidenciesCollection;
    }

    public void setMaterialIncidenciesCollection(Collection<MaterialIncidencies> materialIncidenciesCollection) {
        this.materialIncidenciesCollection = materialIncidenciesCollection;
    }

    @Override
    public int hashCode() {
        int hash = 0;
        hash += (id != null ? id.hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof Incidencies)) {
            return false;
        }
        Incidencies other = (Incidencies) object;
        if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return "id: "+id+", id_localitzacio: "+idLocalitzacio.getId()+", id_usuari_obertura: "+idUsuariObertura.getId()+", id_usuari_operari: "+idUsuariOperari.getId()+
                ", id_estat: "+idEstat.getId()+", id_prioritat: "+idPrioritat.getId()+", data_incidencia: "+dataIncidencia.toString()+", data_inici: "+dataInici.toString()+
                ", data_fi: "+dataFi.toString()+", desc_curta: "+descCurta+", desc_llarga: "+descLlarga+"; ";
    }

}

Y el metodo получает que viene por defecto al crear el servicio es este:

@GET
    @Override
    @Produces({MediaType.APPLICATION_JSON})
    public List<Incidencies> findAll() {
        return super.findAll();
    }

Y cuando hago el get, el json я продажа asi:

{
    "dataFi": "2017-04-06T00:00:00+02:00",
    "dataIncidencia": "2017-03-25T00:00:00+01:00",
    "dataInici": "2017-04-06T00:00:00+02:00",
    "descCurta": "Aixeta trencada",
    "descLlarga": "La aixeta del lavabo situat a la dreta està bessant aigua continuament",
    "id": 1,
    "idEstat": {
      "id": 2,
      "nomEstat": "assignada"
    },
    "idLocalitzacio": {
      "id": 12,
      "nomLloc": "dpt. exportació"
    },
    "idPrioritat": {
      "id": 2,
      "nomPrioritat": "normal"
    },
    "idUsuariObertura": {
      "bloquejat": false,
      "cognoms": "Olivera Cortes",
      "contrasenya": "e10adc3949ba59abbe56e057f20f883e",
      "correu": "EulaliaOli@gmail.com",
      "id": 2,
      "idTipus": {
        "id": 2,
        "nomTipus": "gestor"
      },
      "idUsuari": "EulaliaOli2",
      "mobil": "698899663",
      "nom": "Calatina"
    },
    "idUsuariOperari": {
      "bloquejat": false,
      "cognoms": "Olivera Cortes",
      "contrasenya": "e10adc3949ba59abbe56e057f20f883e",
      "correu": "EulaliaOli@gmail.com",
      "id": 3,
      "idTipus": {
        "id": 2,
        "nomTipus": "gestor"
      },
      "idUsuari": "EulaliaOli",
      "mobil": "698899663",
      "nom": "Eulalia"
    }
  },

Y эй quiero que me salga asi:

{
    "dataFi": "2017-04-06T00:00:00+02:00",
    "dataIncidencia": "2017-03-25T00:00:00+01:00",
    "dataInici": "2017-04-06T00:00:00+02:00",
    "descCurta": "Aixeta trencada",
    "descLlarga": "La aixeta del lavabo situat a la dreta està bessant aigua continuament",
    "id": 1,
    "idEstat":2,
    "idLocalitzacio": 12 ,   
    "idPrioritat": 2,
    "idUsuariObertura": 2,
    "idUsuariOperari": 2,
  }

Комо puedo solucionarlo? Lógicamente подставляют esta estructura también, танго problemas подставляют сообщение el y el put.

Окись церия Otra opción хитрый взгляд que desde la aplicación se pueda, Java довода "против" el json (es el lenguaje que utilizamos) descartando Лос Кампус de las моет foráneas que no interesen y quedarse, подставляет el идентификатор соло de la llave foránea. Pero Комо? Никакая пустая болтовня encuentro soluciones en ninguna.

1
задан 04.04.2017, 13:27
1 ответ

Нормальное в этих случаях состоит в том, чтобы иметь Java Bean, Дату Трансфер Обхект (DTO) для слоя presentaciГіn (хотя это будет услуга REST), остается considerГЎndose слой presentaciГіn:

class IncidenciesDTO {

   // los campos de Incidencies que quieras enviar

   static public IncidenciesDTO populateDTO(Incidencies in) {
       IncidenciesDTO dto= new IncidenciesDTO();
       dto.id=in.getId();
       // ... resto de campos 

       return dto;
   }
}

, Из-за которого твоя услуга quedarГ - во что-то как:

@GET
@Override
@Produces({MediaType.APPLICATION_JSON})
public List<IncidenciesDTO> findAll() {
    List<IncidenciesDTO> dtoList = super.findAll().stream()
        .map(in -> IncidenciesDTO.populateDTO(in)).collect(Collectors.toList());
    return dtoList;
}
0
ответ дан 24.11.2019, 10:11