J'ai écrit une requête nommée dans la classe d'entité Voter
NamedQuery(name = "Voter.findvoter", query = "SELECT count(*) FROM Voter v WHERE v.voterID = :voterID" and where v.password= : password),
Je souhaite appeler cette requête nommée et je dois également définir un ID d'électeur et un mot de passe.
Pouvez-vous m'aider. Je vous remercie
Je suppose que vous avez manqué le symbole @ sur votre annotation NamedQuery?
Dans le code, vous l'appeleriez comme ceci:
List results = em.createNamedQuery("Voter.findvoter")
.setParameter("voterID", "blah")
.setParameter("password","blahblahblah")
.getResultList();
Votre requête nommée pose deux problèmes évidents:
@NamedQuery
et pas seulement NamedQuery
query = "SELECT count(*) FROM Voter v WHERE v.voterID = :voterID" and where v.password= : password
.
Le problème est que vous terminez votre chaîne après :voterID
, au lieu d’après :password
et que vous avez "où" deux fois et que vous avez un espace entre ":" et "mot de passe". Votre requête devrait ressembler à ceci:
query = "SELECT count(*) FROM Voter v WHERE v.voterID = :voterID and v.password= :password"
(Je viens de déplacer le "à la fin et a supprimé le deuxième" où "et l'espace après le": ")
Les étapes communes sont (requête nommée ou autre)
avec les trois étapes ci-dessus, vous pouvez exécuter n'importe quelle requête JPA.
En fait, le brent a raison, votre NameQuery devrait ressembler à ceci,
@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{ ... }
et ailleurs vous devriez essayer celui-ci (ce que Dick a déjà dit)
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;
}
}
alors vous pourriez l'utiliser comme
@Inject
VoterFasade voterFasade;
///
long id=12;
voterFasade.findVoter(id);
devrait réellement fonctionner (c'est un code non compilé).
vous pouvez également le faire avec Repository, consultez le lien ci-dessous, partie Repository Listing23.Example repository entrez la description du lien ici