Llamar a procedimiento almacenado desde Java / JPA
Estoy escribiendo una aplicación web simple para llamar a un procedimiento almacenado y recuperar algunos datos. Es una aplicación muy simple, que interactúa con la base de datos del cliente. Pasamos la identificación del empleado y la identificación de la empresa y el procedimiento almacenado devolverá los detalles del empleado.
La aplicación web no puede actualizar / eliminar datos y está utilizando SQL Server.
Estoy desplegando mi aplicación web en Jboss AS. ¿Debo usar JPA para acceder al procedimiento almacenado oCallableStatement
. Cualquier ventaja de usar JPA en este caso.
También cuál será la instrucción sql para llamar a este procedimiento almacenado. Nunca he usado procedimientos almacenados antes y estoy luchando con este. Google no fue de mucha ayuda.
Aquí está el procedimiento almacenado:
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
Actualizar:
Para cualquier otra persona que tenga problemas para llamar al procedimiento almacenado usandoJPA.
Query query = em.createNativeQuery("{call getEmployeeDetails(?,?)}",
EmployeeDetails.class)
.setParameter(1, employeeId)
.setParameter(2, companyId);
List<EmployeeDetails> result = query.getResultList();
Cosas que he notado:
Los nombres de los parámetros no me funcionaron, así que intente usar el índice de parámetros.Correcta instrucción SQL{call sp_name(?,?)}
en lugar decall sp_name(?,?)
Si el procedimiento almacenado devuelve un conjunto de resultados, incluso si sabe con solo una fila,getSingleResult
no funcionaPasar unresultSetMapping
nombre o detalles de la clase de resultado