Tema: jpa y mysql
Ver Mensaje Individual
  #3 (permalink)  
Antiguo 04/12/2013, 02:00
andresinfa80
 
Fecha de Ingreso: diciembre-2013
Mensajes: 5
Antigüedad: 10 años, 5 meses
Puntos: 0
Respuesta: jpa y mysql

Gracias HackmanC por responder. Antes que nada evise y si estaba mal, puesto que la tabla Equiposrestaurante es la que contiene las dos llaves foranead idRestaurantes e idEquipos, por ende traslade la query a dicha clase, quedando asi:

@Entity
@Table(name = "equiposrestaurante")
@XmlRootElement
@NamedQueries({
@NamedQuery(name = "Equiposrestaurante.findAll", query = "SELECT e FROM Equiposrestaurante e"),
@NamedQuery(name = "Equiposrestaurante.findById", query = "SELECT e FROM Equiposrestaurante e WHERE e.id = :id"),
@NamedQuery(name = "Equiposrestaurante.findByIpDispositivo", query = "SELECT e FROM Equiposrestaurante e WHERE e.ipDispositivo = :ipDispositivo"),
@NamedQuery(name = "Equiposrestaurante.findByNumRte", query = "SELECT er FROM Equiposrestaurante er INNER JOIN er.Restaurantes r ON er.idRestaurantes = r.id INNER JOIN er.Equipos eq WHERE er.numRte = :numRte"),
@NamedQuery(name = "Equiposrestaurante.findBySerial", query = "SELECT e FROM Equiposrestaurante e WHERE e.serial = :serial"),
@NamedQuery(name = "Equiposrestaurante.findByMantenimiento", query = "SELECT e FROM Equiposrestaurante e")})
public class Equiposrestaurante implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Basic(optional = false)
@Column(name = "id")
private Integer id;
@Basic(optional = false)
@Column(name = "ipDispositivo")
private String ipDispositivo;
@Column(name = "serial")
private String serial;
@Basic(optional = false)
@Column(name = "mantenimiento")
private String mantenimiento;
@JoinColumn(name = "idRestaurantes", referencedColumnName = "id")
@ManyToOne(optional = false)
private Restaurantes idRestaurantes;
@JoinColumn(name = "idEquipos", referencedColumnName = "id")
@ManyToOne(optional = false)
private Equipos idEquipos;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "idEquiposRestaurante")

private Collection<Incidenciarestaurante> incidenciarestauranteCollection;

public Equiposrestaurante() {
}

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

public Equiposrestaurante(Integer id, String ipDispositivo, String mantenimiento) {
this.id = id;
this.ipDispositivo = ipDispositivo;
// this.serial = serial;
this.mantenimiento = mantenimiento;
}

public Integer getId() {
return id;
}

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

public String getIpDispositivo() {
return ipDispositivo;
}

public void setIpDispositivo(String ipDispositivo) {
this.ipDispositivo = ipDispositivo;
}

public String getSerial() {
return serial;
}

public void setSerial(String serial) {
this.serial = serial;
}

public String getMantenimiento() {
return mantenimiento;
}

public void setMantenimiento(String mantenimiento) {
this.mantenimiento = mantenimiento;
}

public Restaurantes getIdRestaurantes() {
return idRestaurantes;
}

public void setIdRestaurantes(Restaurantes idRestaurantes) {
this.idRestaurantes = idRestaurantes;
}

public Equipos getIdEquipos() {
return idEquipos;
}

public void setIdEquipos(Equipos idEquipos) {
this.idEquipos = idEquipos;
}

@XmlTransient
public Collection<Incidenciarestaurante> getIncidenciarestauranteCollection() {
return incidenciarestauranteCollection;
}

public void setIncidenciarestauranteCollection(Collection<Inci denciarestaurante> incidenciarestauranteCollection) {
this.incidenciarestauranteCollection = incidenciarestauranteCollection;
}

@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 Equiposrestaurante)) {
return false;
}
Equiposrestaurante other = (Equiposrestaurante) 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 "modelo.entidad.Equiposrestaurante[ id=" + id + " ]";
}

}


Creando la consulta en EquiposrestauranteJpaController asi:

public List<Equiposrestaurante> findNumeroRestaurante(String numRte ){
EntityManager em = getEntityManager();


try {
Query query=em.createNamedQuery("Equiposrestaurante.find ByNumRte");
query.setParameter("numRte","%"+numRte+"%");
return query.getResultList();


} finally {
em.close();
}
}

Y la prueba aca:

public class Prueba {


public static void main(String args[]) {
RestaurantesJpaController restauranteJpaController = new RestaurantesJpaController();
EquiposrestauranteJpaController equiposrestauranteJpaController = new EquiposrestauranteJpaController();

List<Equiposrestaurante> cargar = equiposrestauranteJpaController.findNumeroRestaura nte("MCD 0001");
for (Equiposrestaurante equiposrestaurante : cargar) {
System.out.println(equiposrestaurante.getIncidenci arestauranteCollection());
}
}

}

Ahora me arroja este error al compilar:

[EL Severe]: 2013-12-04 08:44:21.128--ServerSession(742510685)--Thread(Thread[main,5,main])--Local Exception Stack:
Exception [EclipseLink-8030] (Eclipse Persistence Services - 2.2.0.v20110202-r8913): org.eclipse.persistence.exceptions.JPQLException
Exception in thread "main" javax.persistence.PersistenceException: Exception [EclipseLink-8030] (Eclipse Persistence Services - 2.2.0.v20110202-r8913): org.eclipse.persistence.exceptions.JPQLException
Exception Description: Error compiling the query [Equiposrestaurante.findByNumRte: SELECT er FROM Equiposrestaurante er WHERE er.Restaurantes.id =:Restaurantes_id AND er.Equipos =:Equipos], line 1, column 46: unknown state or association field [Restaurantes] of class [modelo.entidad.Equiposrestaurante].
Exception Description: Error compiling the query [Equiposrestaurante.findByNumRte: SELECT er FROM Equiposrestaurante er WHERE er.Restaurantes.id =:Restaurantes_id AND er.Equipos =:Equipos], line 1, column 46: unknown state or association field [Restaurantes] of class [modelo.entidad.Equiposrestaurante].

at org.eclipse.persistence.exceptions.JPQLException.u nknownAttribute(JPQLException.java:457)
at org.eclipse.persistence.internal.jpa.EntityManager SetupImpl.deploy(EntityManagerSetupImpl.java:422)
at org.eclipse.persistence.internal.jpa.parsing.DotNo de.validate(DotNode.java:88)
at org.eclipse.persistence.internal.jpa.EntityManager FactoryImpl.getServerSession(EntityManagerFactoryI mpl.java:185)
at org.eclipse.persistence.internal.jpa.parsing.DotNo de.validate(DotNode.java:73)
at org.eclipse.persistence.internal.jpa.EntityManager FactoryImpl.createEntityManagerImpl(EntityManagerF actoryImpl.java:242)
at org.eclipse.persistence.internal.jpa.parsing.Node. validate(Node.java:91)
at org.eclipse.persistence.internal.jpa.parsing.Binar yOperatorNode.validate(BinaryOperatorNode.java:34)
at org.eclipse.persistence.internal.jpa.EntityManager FactoryImpl.createEntityManager(EntityManagerFacto ryImpl.java:230)
at org.eclipse.persistence.internal.jpa.parsing.Equal sNode.validate(EqualsNode.java:41)
at control.EquiposrestauranteJpaController.getEntityM anager(EquiposrestauranteJpaController.java:41)
at org.eclipse.persistence.internal.jpa.parsing.Node. validate(Node.java:91)
at control.EquiposrestauranteJpaController.findNumero Restaurante(EquiposrestauranteJpaController.java:2 45)
at org.eclipse.persistence.internal.jpa.parsing.Logic alOperatorNode.validate(LogicalOperatorNode.java:3 9)
at interfaz.Prueba.main(Prueba.java:24)
at org.eclipse.persistence.internal.jpa.parsing.Where Node.validate(WhereNode.java:34)
at org.eclipse.persistence.internal.jpa.parsing.Parse Tree.validate(ParseTree.java:207)
Caused by: Exception [EclipseLink-8030] (Eclipse Persistence Services - 2.2.0.v20110202-r8913): org.eclipse.persistence.exceptions.JPQLException
at org.eclipse.persistence.internal.jpa.parsing.Parse Tree.validate(ParseTree.java:183)




No entiendo porque, reconozco que soy nuevo en esto de JPA, anteriormente hice un proyecto igual y cuando llegue a estas consultas lo que hice fue revolverlas mezclando JPA con Procedimientos Almacenados, cosa que no debi haber hecho porque pues para eso esta JPA, pero ahora si quiero dedicarme a la tarea de hacerlo bien, espero me puedas colaborar por favor, he leido el link que me enviaste y siguiendo los pasos creo que esta bien la sintaxys....

A la espera de tus comentarios.

Andres Infante.