I'm doing the final project and I have a restful web service created in Netbeans that uses a remote database to a Glassfish server. We have to create two apps a desktop and the other Android in which you can manipulate / consult in this database. Between the tables of the database there are relations, foreign keys. When I recover, with get and in json format, the incident table that has 5 foreign keys, I drag all the fields of those tables. And I just want the ids of those records.
The persistent class is this:
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+"; ";
}
}
And the get method that comes by default when creating the service is this:
@GET
@Override
@Produces({MediaType.APPLICATION_JSON})
public List<Incidencies> findAll() {
return super.findAll();
}
And when I do the get, the json goes like this:
{
"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": "[email protected]",
"id": 2,
"idTipus": {
"id": 2,
"nomTipus": "gestor"
},
"idUsuari": "EulaliaOli2",
"mobil": "698899663",
"nom": "Calatina"
},
"idUsuariOperari": {
"bloquejat": false,
"cognoms": "Olivera Cortes",
"contrasenya": "e10adc3949ba59abbe56e057f20f883e",
"correu": "[email protected]",
"id": 3,
"idTipus": {
"id": 2,
"nomTipus": "gestor"
},
"idUsuari": "EulaliaOli",
"mobil": "698899663",
"nom": "Eulalia"
}
},
And I want it to come out like this:
{
"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,
}
How can I solve it? Logically with this structure I also have problems with the post and the put.
Another option would be that from the application you can read the json with Java (it's the language we use) discarding the foreign key fields that do not interest and keep the id of the foreign key alone. But how? I can not find solutions anywhere.