tutorial mvc mediante libro framework español desarrollo book aplicaciones jpa named-query

jpa - mvc - Cómo llamar a consulta con nombre



spring mvc 4 tutorial español (4)

¿Asumo que te has perdido el símbolo @ en tu anotación de NamedQuery?

En el código, lo llamarías así:

List results = em.createNamedQuery("Voter.findvoter") .setParameter("voterID", "blah") .setParameter("password","blahblahblah") .getResultList();

Escribí una consulta con nombre en la clase de entidad Votante

NamedQuery(name = "Voter.findvoter", query = "SELECT count(*) FROM Voter v WHERE v.voterID = :voterID" and where v.password= : password),

Quiero llamar a esta consulta con nombre y también necesito establecer ID de usuario y contraseña.

Me puedes ayudar. Gracias


En realidad, Brent tiene razón, su NameQuery debería ser algo así.

@NamedQuery(name = "Voter.findvoter", query = "SELECT count(*) FROM Voter v WHERE v.voterID = :voterID AND where v.password = :password") @Entity public class Voter implements Serializable{ ... }

y en otro lugar deberías probar este (que Dick ya ha dicho)

public class VoterFasade{ public List<Voter> findVoter(long id,String password){ List<Voter> results = em.createNamedQuery("Voter.findvoter") .setParameter("voterID", id) .setParameter("password",password) .getResultList(); return result; } }

entonces podrías usarlo como

@Inject VoterFasade voterFasade; /// long id=12; voterFasade.findVoter(id);

realmente debería funcionar. (es un código no compilado).

también puede hacerlo con el Repositorio, verifique el enlace a continuación, parte Repository Listing23.Example repository ingrese la descripción del enlace aquí


Hay dos problemas obvios con su consulta nombrada que podrían causar problemas:

  • Es una anotación por lo que debería ser @NamedQuery no solo NamedQuery
  • Su consulta es actualmente:

query = "SELECT count(*) FROM Voter v WHERE v.voterID = :voterID" and where v.password= : password .

El problema es que usted termina su Cadena después de :voterID , en lugar de después :password y tiene "donde" dos veces y tiene un espacio entre ":" y "contraseña". Su consulta debe verse así:

query = "SELECT count(*) FROM Voter v WHERE v.voterID = :voterID and v.password= :password"

(Acabo de mover el "al final y quité el segundo" donde "y el espacio después del": ")


Los pasos comunes son (consulta con nombre o de otra manera)

  1. Crear una consulta - em tiene cinco métodos de creación.
  2. Configure la consulta con parámetros si es necesario: la interfaz de consulta tiene estos métodos.
  3. Ejecute la consulta: la interfaz de consulta tiene 3 métodos relacionados con la ejecución.

con los tres pasos anteriores puede ejecutar cualquier consulta JPA.