gpt4 book ai didi

java - 使用 JPA 从存储过程中获取 select 语句结果?

转载 作者:行者123 更新时间:2023-11-29 06:29:33 25 4
gpt4 key购买 nike

使用 JPA,我正在调用如下所示的 MS SQL Server 2008 R2 存储过程

procedure [dbo].[testProc]
@param1 varchar(max),
@param2 datetime
as
begin
EXEC sessionProc

DECLARE @reportData varbinary(max)

EXEC aThirdPartyProc
@reportData out,
@parameter1 = @param1,
@date = @param2

SELECT col1, col2
FROM fFunction(@reportData)

end

当试图从 select 语句中获取结果时

StoredProcedureQuery q = em.createNamedStoredProcedureQuery("reportData");
q.setParameter("param1", "val1");
q.setParameter("param2", new Date());
return (List<ReportData>) q.getResultList();

我明白了

java.lang.IllegalStateException: Current CallableStatement ou was not a ResultSet, but getResultList was called
at org.hibernate.jpa.internal.StoredProcedureQueryImpl.getResultList(StoredProcedureQueryImpl.java:319)

如何获取select语句的结果?

注意:如果我将 testProc 简化为一个简单的选择(删除两个 EXEC 语句),JPA 代码就可以工作。

此外,这是 ReportData 实体类:

@Entity
@NamedStoredProcedureQuery(name = "reportData", procedureName = "testProc", resultClasses = ReportData.class, parameters = {
@StoredProcedureParameter(mode = ParameterMode.IN, name = "param1", type = String.class),
@StoredProcedureParameter(mode = ParameterMode.IN, name = "param2", type = Date.class)
})
public class ReportData {
@Id
private String col1;
private String col2;
// getter and setter for col1 and col2
}

我已经在 SQL Server Management Studio 中测试了该过程,它可以很好地从 select 语句返回结果。

最佳答案

除非使用 SET NOCOUNT ON;,否则来自 SP 内多个查询的反馈会导致 JPA 关闭。

在您的 SP 中的 BEGIN 之后插入 SET NOCOUNT ON;

使用 SET NOCOUNT ON 是一个 general best practice .

关于java - 使用 JPA 从存储过程中获取 select 语句结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40009807/

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