我正在编写一个简单的 Web 应用程序来调用存储过程并检索一些数据。它是一个非常简单的应用程序,它与客户的数据库进行交互。我们传递员工 ID 和公司 ID,存储过程将返回员工详细信息。
Web 应用程序无法更新/删除数据并且正在使用 SQL Server。
我正在 Jboss AS 中部署我的 Web 应用程序。我应该使用 JPA 访问存储过程还是 CallableStatement
。在这种情况下使用 JPA 的任何优势。
还有什么将是调用此存储过程的 sql 语句。我以前从未使用过存储过程,我正在努力解决这个问题。谷歌没有太大帮助。
这是存储过程:
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
名称或结果类详细信息
原文由 user431514 发布,翻译遵循 CC BY-SA 4.0 许可协议
JPA 2.1 现在支持存储过程,请在 此处 阅读 Java 文档。
例子:
请参阅 此处 的详细示例。