我正在编写一个简单的Web应用程序,调用一个存储过程并检索一些数据。 这是一个与客户数据库交互的非常简单的应用程序。 我们传递员工ID和公司ID,存储过程将返回员工详细信息。
Web应用程序无法更新/删除数据,并且正在使用SQL Server。
我将我的Web应用程序部署在Jboss AS上。 在这种情况下,我应该使用JPA访问存储过程还是CallableStatement
?使用JPA的任何优点吗?
以下是存储过程:
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
更新:
对于其他使用JPA调用存储过程遇到问题的人。
Query query = em.createNativeQuery("{call getEmployeeDetails(?,?)}",
EmployeeDetails.class)
.setParameter(1, employeeId)
.setParameter(2, companyId);
List<EmployeeDetails> result = query.getResultList();
我注意到的事情:
- 参数名对我没用,尝试使用参数索引。
- 正确的SQL语句为
{call sp_name(?,?)}
而不是call sp_name(?,?)
- 如果存储过程返回结果集,即使您知道只有一行,
getSingleResult
也无法工作。 - 传递一个
resultSetMapping
名称或结果类的详细信息。