04/12/2013, 02:00
|
| | Fecha de Ingreso: diciembre-2013
Mensajes: 5
Antigüedad: 11 años, 1 mes 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. |