Tôi đang viết một ứng dụng web đơn giản để gọi một thủ tục được lưu trữ và truy xuất một số dữ liệu. Nó là một ứng dụng rất đơn giản, tương tác với cơ sở dữ liệu của khách hàng. Chúng tôi chuyển id nhân viên và id công ty và quy trình được lưu trữ sẽ trả về thông tin chi tiết của nhân viên.
Ứng dụng web không thể cập nhật / xóa dữ liệu và đang sử dụng SQL Server.
Tôi đang triển khai ứng dụng web của mình trong Jboss AS. Tôi có nên sử dụng JPA để truy cập quy trình được lưu trữ hay khôngCallableStatement
. Bất kỳ lợi thế nào của việc sử dụng JPA trong trường hợp này.
Ngoài ra câu lệnh sql sẽ gọi thủ tục được lưu trữ này là gì. Tôi chưa bao giờ sử dụng các thủ tục được lưu trữ trước đây và tôi đang đấu tranh với cái này. Google không giúp được gì nhiều.
Đây là quy trình được lưu trữ:
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
Cập nhật:
Đối với bất kỳ ai khác gặp sự cố khi gọi thủ tục được lưu trữ bằng JPA .
Query query = em.createNativeQuery("{call getEmployeeDetails(?,?)}",
EmployeeDetails.class)
.setParameter(1, employeeId)
.setParameter(2, companyId);
List<EmployeeDetails> result = query.getResultList();
Những điều tôi đã nhận thấy:
- Tên tham số không hoạt động với tôi, vì vậy hãy thử sử dụng chỉ mục tham số.
- Câu lệnh sql đúng
{call sp_name(?,?)}
thay vìcall sp_name(?,?)
- Nếu thủ tục được lưu trữ đang trả về một tập hợp kết quả, ngay cả khi bạn biết chỉ với một hàng,
getSingleResult
sẽ không hoạt động - Chuyển
resultSetMapping
tên hoặc chi tiết lớp kết quả