Estou escrevendo um aplicativo da Web simples para chamar um procedimento armazenado e recuperar alguns dados. É uma aplicação bastante simples, que interage com a base de dados do cliente. Passamos a id do funcionário e a id da empresa e o procedimento armazenado retornará os detalhes do funcionário.
O aplicativo Web não pode atualizar / excluir dados e está usando o SQL Server.
Estou implantando meu aplicativo da web em Jboss AS. Devo usar JPA para acessar o procedimento armazenado ou CallableStatement
. Qualquer vantagem de usar JPA neste caso.
Além disso, qual será a instrução sql para chamar este procedimento armazenado. Nunca usei stored procedures antes e estou tendo dificuldades com este. O Google não ajudou muito.
Aqui está o procedimento armazenado:
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
Atualizar:
Para qualquer outra pessoa que tenha problemas para chamar o procedimento armazenado usando JPA .
Query query = em.createNativeQuery("{call getEmployeeDetails(?,?)}",
EmployeeDetails.class)
.setParameter(1, employeeId)
.setParameter(2, companyId);
List<EmployeeDetails> result = query.getResultList();
Coisas que notei:
- Nomes de parâmetro não funcionaram para mim, então tente usar o índice de parâmetro.
- Instrução sql correta em
{call sp_name(?,?)}
vez decall sp_name(?,?)
- Se o procedimento armazenado estiver retornando um conjunto de resultados, mesmo se você souber com apenas uma linha,
getSingleResult
não funcionará - Passe um
resultSetMapping
nome ou detalhes de classe de resultado