gpt4 book ai didi

java - 如何从 Java 和 JPA 调用存储过程

转载 作者:IT老高 更新时间:2023-10-28 11:35:14 25 4
gpt4 key购买 nike

我正在编写一个简单的 Web 应用程序来调用存储过程并检索一些数据。它是一个非常简单的应用程序,它与客户的数据库进行交互。我们传递员工 ID 和公司 ID,存储过程将返回员工详细信息。

Web 应用程序无法更新/删除数据并且正在使用 SQL Server。

我正在 Jboss AS 中部署我的 Web 应用程序。我应该使用 JPA 访问存储过程还是 CallableStatement。在这种情况下使用 JPA 的任何优势。

还有什么是调用这个存储过程的sql语句。我以前从未使用过存储过程,我正在努力解决这个问题。 Google 帮不上什么忙。

这是存储过程:

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();

我注意到的事情:

  1. 参数名称对我不起作用,因此请尝试使用参数索引。
  2. 正确的 sql 语句 {call sp_name(?,?)} 而不是 call sp_name(?,?)
  3. 如果存储过程返回一个结果集,即使你知道只有一行,getSingleResult 也不会工作
  4. 传递 resultSetMapping 名称或结果类详细信息

最佳答案

JPA 2.1 现在支持存储过程,请阅读 Java 文档 here .

例子:

StoredProcedureQuery storedProcedure = em.createStoredProcedureQuery("sales_tax");
// set parameters
storedProcedure.registerStoredProcedureParameter("subtotal", Double.class, ParameterMode.IN);
storedProcedure.registerStoredProcedureParameter("tax", Double.class, ParameterMode.OUT);
storedProcedure.setParameter("subtotal", 1f);
// execute SP
storedProcedure.execute();
// get result
Double tax = (Double)storedProcedure.getOutputParameterValue("tax");

查看详细示例here .

关于java - 如何从 Java 和 JPA 调用存储过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3572626/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com