Piszę prostą aplikację internetową do wywoływania procedury składowanej i pobierania niektórych danych. Jest to bardzo prosta aplikacja, która współpracuje z bazą danych klienta. Przekazujemy identyfikator pracownika i identyfikator firmy, a procedura składowana zwróci dane pracownika.
Aplikacja internetowa nie może aktualizować / usuwać danych i używa SQL Server.
Wdrażam moją aplikację internetową w Jboss AS. Czy powinienem używać JPA, aby uzyskać dostęp do procedury składowanej lub CallableStatement
. Wszelkie korzyści z używania JPA w tym przypadku.
Jaka będzie instrukcja sql, aby wywołać tę procedurę składowaną. Nigdy wcześniej nie korzystałem z procedur składowanych i zmagam się z tym. Google niewiele pomogło.
Oto procedura składowana:
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
Aktualizacja:
Dla każdego, kto ma problem z wywołaniem procedury składowanej przy użyciu JPA .
Query query = em.createNativeQuery("{call getEmployeeDetails(?,?)}",
EmployeeDetails.class)
.setParameter(1, employeeId)
.setParameter(2, companyId);
List<EmployeeDetails> result = query.getResultList();
Rzeczy, które zauważyłem:
- Nazwy parametrów nie działały, więc spróbuj użyć indeksu parametrów.
- Prawidłowa instrukcja sql
{call sp_name(?,?)}
zamiastcall sp_name(?,?)
- Jeśli procedura składowana zwraca zestaw wyników, nawet jeśli wiesz, że ma tylko jeden wiersz,
getSingleResult
nie zadziała - Przekaż
resultSetMapping
nazwę lub szczegóły klasy wyników