J'écris une application web simple pour appeler une procédure stockée et récupérer des données. C'est une application très simple, qui interagit avec la base de données du client. Nous passons l'identifiant de l'employé et l'identifiant de la société et la procédure stockée renvoie les détails de l'employé.
L'application Web ne peut pas mettre à jour/supprimer les données et utilise SQL Server.
Je déploie mon application web dans Jboss AS. Dois-je utiliser JPA pour accéder à la procédure stockée ou bien CallableStatement
. Y a-t-il un avantage à utiliser JPA dans ce cas ?
Aussi, quelle sera l'instruction sql pour appeler cette procédure stockée. Je n'ai jamais utilisé de procédures stockées auparavant et j'ai du mal avec celle-ci. Google ne m'a pas beaucoup aidé.
Voici la procédure stockée :
CREATE procedure getEmployeeDetails (@employeeId int, @companyId int)
as
begin
select firstName,
lastName,
gender,
address
from employee et
where et.employeeId = @employeeId
and et.companyId = @companyId
end
Mise à jour :
Si quelqu'un d'autre a des problèmes pour appeler une procédure stockée en utilisant JPA .
Query query = em.createNativeQuery("{call getEmployeeDetails(?,?)}",
EmployeeDetails.class)
.setParameter(1, employeeId)
.setParameter(2, companyId);
List<EmployeeDetails> result = query.getResultList();
Des choses que j'ai remarquées :
- Les noms de paramètres n'ont pas fonctionné pour moi, alors essayez d'utiliser l'index des paramètres.
- Instruction sql correcte
{call sp_name(?,?)}
au lieu decall sp_name(?,?)
- Si la procédure stockée renvoie un ensemble de résultats, même si vous ne connaissez qu'une seule ligne,
getSingleResult
ne fonctionne pas - Passez un
resultSetMapping
nom ou détails de la classe de résultats
2 votes
Vous ne pouvez pas utiliser de paramètres nommés dans indigène requêtes. Les paramètres nommés ne sont supportés que pour les requêtes JPQL. (Si vous préférez les paramètres nommés, vous pouvez écrire votre propre classe pour traduire les paramètres nommés en paramètres numérotés).
0 votes
J'ai toujours utilisé des paramètres nommés avec createNativeQueries et je n'ai jamais eu de problème. Je viens de jeter un coup d'œil au système actuel sur lequel je travaille et il y a des tonnes de requêtes natives avec des paramètres nommés. Pouvez-vous nous fournir des références pour étayer votre affirmation ? Notre ensemble est JPA 2 et Hibernate 4+.