Je dois appeler une procédure stockée à l'aide de JPA et a trouvé cet article: p>
http://www.oracle.com/technology/pub/ Articles / Vasiliev-jpql.html P>
Ce qui explique comment utiliser EntityManager.CréenativeQuery. Cependant, l'exemple appelle en réalité une fonction qui a un argument de retour. J'ai essayé de chercher un exemple d'appel à une procédure stockée qui n'a pas de retour, mais je n'ai rien pu trouver rien. p>
Puis-je utiliser CreateNativeQuery pour appeler une procédure? Ou la procédure doit-elle être modifiée pour être une fonction (peut-être renvoie un résultat de réussite / défaillance)? P>
Merci! P>
3 Réponses :
du Wiki JPA:
1.4 Procédures stockées H2>
JPA n'a aucun support direct pour les procédures stockées. Certains types de procédures stockées peuvent être exécutés en JPA via des requêtes natales. Les requêtes natives en JPA permettent à n'importe quel SQL qui ne renvoie rien ou renvoie un résultat de la base de données à exécuter. La syntaxe pour exécuter une procédure stockée dépend de la base de données. JPA ne prend pas en charge les procédures stockées qui utilisent des paramètres de sortie ou d'inuite. Certaines bases de données telles que DB2, Sybase et SQL Server permettent des procédures stockées pour renvoyer les ensembles de résultats. Oracle n'autorise pas les résultats des résultats à renvoyer, seuls les paramètres de sortie, mais définissent un type de curseur pouvant être renvoyé sous forme de paramètre de sortie. Oracle prend également en charge les fonctions stockées, qui peuvent renvoyer une valeur unique. Une fonction stockée peut normalement être exécutée à l'aide d'une requête SQL native en sélectionnant la valeur de la fonction de la table Dual Oracle. P>
Certains fournisseurs de la JPA ont une prise en charge étendue pour les procédures stockées, certains prennent également la prise en charge de toute opération de CRUD pour une entité avec une procédure stockée ou une SQL personnalisée. Certains fournisseurs de la JPA ont une prise en charge des paramètres de sortie du curseur. P>
Exemple d'exécution d'une procédure stockée sur Oracle h3>
EntityManager em = getEntityManager(); Query query = em.createNativeQuery("BEGIN VALIDATE_EMP(P_EMP_ID=>?); END;"); query.setParameter(1, empId); query.executeUpdate();
- Certaines expérimentations (c'est-à-dire l'essayer) li>
- si nécessaire (et si possible) modifier la procédure stockée li>
- envisager des extensions spécifiques au fournisseur (en dernier recours) li> ul> p>
Merci Pascal pour le lien. Je ne sais pas comment j'ai manqué cette page dans ma recherche.
Si possible, vous aurez probablement besoin d'envelopper l'appel de procédure de cette façon:
em.createNativeQuery("BEGIN yourprocedure; END;")
Comme déjà indiqué, la spécification JPA ne prend pas encore en charge les propagines stockées, mais le fournisseur ECLIPSelink JPA fait: P>