Chamando o procedimento armazenado do Java / JPA
Estou escrevendo um aplicativo Web simples para chamar um procedimento armazenado e recuperar alguns dados. É uma aplicação muito simples, que interage com o banco de dados do cliente. Passamos a identificação do funcionário e a empresa e o procedimento armazenado retornará os detalhes do funcionário.
O aplicativo da Web não pode atualizar / excluir dados e está usando o SQL Server.
Estou implantando meu aplicativo Web no Jboss AS. Devo usar o JPA para acessar o procedimento armazenado ouCallableStatement
. Qualquer vantagem de usar JPA neste caso.
Além disso, qual será a instrução sql para chamar esse procedimento armazenado. Eu nunca usei procedimentos armazenados antes e estou lutando 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 ao chamar o procedimento armazenado usandoJPA.
Query query = em.createNativeQuery("{call getEmployeeDetails(?,?)}",
EmployeeDetails.class)
.setParameter(1, employeeId)
.setParameter(2, companyId);
List<EmployeeDetails> result = query.getResultList();
Coisas que notei:
Os nomes dos parâmetros não funcionaram para mim, então tente usar o índice de parâmetros.Instrução sql correta{call sp_name(?,?)}
ao invés decall sp_name(?,?)
Se o procedimento armazenado estiver retornando um conjunto de resultados, mesmo se você souber apenas com uma linha,getSingleResult
não vai funcionarPasse umresultSetMapping
detalhes de nome ou classe de resultado