Comment utiliser l'instruction préparée en JPA
Je suis un jouer cadre Développeur de l'application.Je suis à l'aide de createNativeQuery méthode en JPA. Dans cet exemple, je veux utiliser une instruction préparée. Quiconque s'il vous plaît m'aider?
Voici le code sans JPA. J'ai besoin d'aide pour convertir une instruction Préparée.
Query query = JPA.em().createNativeQuery("select count(*) from truck t inner join" +
"box b where t.truck_id=b.truck_id and t.shipment_upc='" + code + "'");
BigInteger val = (BigInteger)query.getSingleResult();
System.out.println(val);
- Utiliser un paramètre
t.shipment_upc= :upc
->setParameter("upc", code)
- je vous remercie pour votre réponse. Je suis un débutant . pouvez-vous me dire en détail.. Merci à l'avance.
- La réponse par Subir le souligne 🙂
- merci merci beaucoup
Vous devez vous connecter pour publier un commentaire.
Bref Résumé
Vous devez utiliser les paramètres de la requête ici, mais depuis que vous êtes à l'aide d'un requête native, vous pouvez être limité dans vos choix par rapport à JPQL.
État du Monde
Vous avez peut-être limité de paramètres positionnels:
L'implémentation Hibernate de la JPA prend en charge les paramètres nommés:
Solution
Hibernate
Subir Kumar Sao réponse montre comment résoudre ce problème en utilisant des paramètres nommés. C'est possible, au moins dans Hibernate.
Je vais le répéter ici par souci de comparaison:
Générique JPA (y compris EclipseLink)
J'ai trouvé que, avec EclipseLink (2.5.1), les paramètres nommés n'étaient pas pris en charge.
Au lieu de cela, il est nécessaire d'utiliser des paramètres positionnels. Ces peut être exprimé de deux façons — explicitement et implicitement.
Explicite index
Marque le paramètre à l'aide de
?1
(ou un autre nombre). Cet indice peut être utilisé pour identifier de manière unique ce paramètre précis dans votre requête.Indice implicite
Marque le paramètre à l'aide de seulement
?
. Son indice est basé sur la séquence de tous les paramètres de chaîne de requête.Notes
Observer que:
Query
paramètre de la carte est tout simplement l'index du paramètre de position.D'autres sources