Hello here, making new inquiries.
I'm moving on a API REST project in Java I'm getting the following error when wanting to show my branches of a related base where branches is the parent.
Error al mostrar la sucursal java.lang.IllegalArgumentException: You have attempted to set a parameter at position 1 which does not exist in this query string SELECT s FROM Sucursal s WHERE s.id = :id.
BranchesREST
@Path("/sucursales")
public class SucursalesREST {
EntityManagerFactory emf = Persistence.createEntityManagerFactory("UP_Sucursales");
EntityManager em;
@GET
@Path("/{id}")
@Produces(MediaType.APPLICATION_JSON)
public Response buscarsucursal(@PathParam("id") int id) {
try {
em = emf.createEntityManager();
Sucursal sucursal = em.find(Sucursal.class, id);
sucursal.setEmpleadoList(em.createNamedQuery("Sucursal.findById").setParameter(id , sucursal).getResultList());
System.out.println(sucursal.getEmpleadoList());
return Response.ok(sucursal.toJSON()).build();
} catch (Exception e) {
return Response.ok(500).entity("Error al mostrar la sucursal " + e).build();
} finally {
if (em != null) {
em.close();
}
}
My persistence files:
Branch
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package root.persistence.entities;
import com.fasterxml.jackson.annotation.JsonIdentityInfo;
import com.fasterxml.jackson.annotation.ObjectIdGenerators;
import java.io.Serializable;
import java.util.List;
import javax.persistence.Basic;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlTransient;
/**
*
* @author rodrigo
*/
@Entity
@Table(name = "sucursales")
@XmlRootElement
@NamedQueries({
@NamedQuery(name = "Sucursal.findAll", query = "SELECT s FROM Sucursal s")
, @NamedQuery(name = "Sucursal.findById", query = "SELECT s FROM Sucursal s WHERE s.id = :id")
, @NamedQuery(name = "Sucursal.findByComuna", query = "SELECT s FROM Sucursal s WHERE s.comuna = :comuna")
, @NamedQuery(name = "Sucursal.findByDireccion", query = "SELECT s FROM Sucursal s WHERE s.direccion = :direccion")})
@JsonIdentityInfo(generator=ObjectIdGenerators.PropertyGenerator.class, property="id", scope=Sucursal.class)
public class Sucursal implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@Basic(optional = false)
@NotNull
@Column(name = "id")
private Integer id;
@Size(max = 2147483647)
@Column(name = "comuna")
private String comuna;
@Size(max = 2147483647)
@Column(name = "direccion")
private String direccion;
@OneToMany(mappedBy = "idsucursal", cascade = CascadeType.ALL)
private List<Empleado> empleadoList;
public Sucursal() {
}
public Sucursal(Integer id) {
this.id = id;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getComuna() {
return comuna;
}
public void setComuna(String comuna) {
this.comuna = comuna;
}
public String getDireccion() {
return direccion;
}
public void setDireccion(String direccion) {
this.direccion = direccion;
}
@XmlTransient
public List<Empleado> getEmpleadoList() {
return empleadoList;
}
public void setEmpleadoList(List<Empleado> empleadoList) {
this.empleadoList = empleadoList;
}
@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 Sucursal)) {
return false;
}
Sucursal other = (Sucursal) 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 "root.persistence.entities.Sucursal[ id=" + id + " ]";
}
public Object toJSON() {
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}
}
Employee
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package root.persistence.entities;
import com.fasterxml.jackson.annotation.JsonIdentityInfo;
import com.fasterxml.jackson.annotation.ObjectIdGenerators;
import java.io.Serializable;
import javax.persistence.Basic;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.Table;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import javax.xml.bind.annotation.XmlRootElement;
/**
*
* @author rodrigo
*/
@Entity
@Table(name = "empleados")
@XmlRootElement
@NamedQueries({
@NamedQuery(name = "Empleado.findAll", query = "SELECT e FROM Empleado e")
, @NamedQuery(name = "Empleado.findById", query = "SELECT e FROM Empleado e WHERE e.id = :id")
, @NamedQuery(name = "Empleado.findByNombre", query = "SELECT e FROM Empleado e WHERE e.nombre = :nombre")
, @NamedQuery(name = "Empleado.findByApellido", query = "SELECT e FROM Empleado e WHERE e.apellido = :apellido")
, @NamedQuery(name = "Empleado.findByRut", query = "SELECT e FROM Empleado e WHERE e.rut = :rut")
, @NamedQuery(name = "Empleado.findByPuesto", query = "SELECT e FROM Empleado e WHERE e.puesto = :puesto")})
@JsonIdentityInfo(generator=ObjectIdGenerators.PropertyGenerator.class, property="id", scope=Empleado.class)
public class Empleado implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@Basic(optional = false)
@NotNull
@Column(name = "id")
private Integer id;
@Size(max = 2147483647)
@Column(name = "nombre")
private String nombre;
@Size(max = 2147483647)
@Column(name = "apellido")
private String apellido;
@Size(max = 2147483647)
@Column(name = "rut")
private String rut;
@Size(max = 2147483647)
@Column(name = "puesto")
private String puesto;
@JoinColumn(name = "idsucursal", referencedColumnName = "id")
@ManyToOne(optional = false)
private Sucursal idsucursal;
public Empleado() {
}
public Empleado(Integer id) {
this.id = id;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getNombre() {
return nombre;
}
public void setNombre(String nombre) {
this.nombre = nombre;
}
public String getApellido() {
return apellido;
}
public void setApellido(String apellido) {
this.apellido = apellido;
}
public String getRut() {
return rut;
}
public void setRut(String rut) {
this.rut = rut;
}
public String getPuesto() {
return puesto;
}
public void setPuesto(String puesto) {
this.puesto = puesto;
}
public Sucursal getIdsucursal() {
return idsucursal;
}
public void setIdsucursal(Sucursal idsucursal) {
this.idsucursal = idsucursal;
}
@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 Empleado)) {
return false;
}
Empleado other = (Empleado) 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 "root.persistence.entities.Empleado[ id=" + id + " ]";
}
}
I do not know what I'm wrong about, I hope someone can help me.