【问题标题】:JPA 2.1, Eclipselink, SQL Server, Spring - NamedStoredProcedureQuery result mappingJPA 2.1、Eclipselink、SQL Server、Spring - NamedStoredProcedureQuery 结果映射
【发布时间】:2016-04-26 15:16:35
【问题描述】:

使用javax或eclipse链接@NamedStoredProcedureQuery,我想调用一个没有cursor或andout参数的sql server存储过程并返回结果集,而不必手动映射结果。

当我使用弹簧@Procedure 时,会自动添加一个 OUT 参数,并且我从数据库返回错误,说我有太多参数,这是有道理的。如果我不这样做,我只能返回 void 但无法获得结果。

有没有办法通过映射参数然后手动映射结果集来避免所有样板代码?由于存储过程是共享的,因此我更改存储过程的能力有限。

我正在寻找一些示例,说明如何使用实体为没有 OUT 参数或游标的存储过程映射结果。 (我怀疑这是不可能的,但我想听听那些使用这些东西的时间比我长(2 天)的人的话)

PS 我已经看到使用 Oracle 完成了这项工作,但是他们定义了一个 out 参数。

ALTER PROCEDURE [dbo].[spGetInstitution] -- Add the parameters for the stored procedure here @InstitutionID INT AS BEGIN -- SET NOCOUNT ON added to prevent extra result sets from -- interfering with SELECT statements. SET NOCOUNT ON; -- Insert statements for procedure here SELECT a.InstitutionID, a.DisplayName FROM tblInstitution a WHERE a.InstitutionID = @InstitutionID END

【问题讨论】:

    标签: sql-server spring eclipselink jpa-2.1


    【解决方案1】:

    您看过StoredProcedureQuery 的文档吗?如果您的过程返回一个结果集,如果您在创建查询时指定了 resultClasses 或 resultSetMappings(如果需要),则 getResultList 将起作用。

    类似:

    StoredProcedureQuery query = em.createStoredProcedureQuery("spGetInstitution", Institution.class);
    query.registerStoredProcedureParameter("InstitutionID", Integer.class, ParameterMode.IN);
    query.setParameter("InstitutionID", institutionID);
    
    boolean result = query.execute();
    assertTrue("Result did not return true for a result set.", result);
    
    List<Institution> institutionResults = query.getResultList();
    

    【讨论】:

    • 这就是我最终使用的。我希望不必手动映射参数,因为我要编写数百个参数,而@Procedure 允许这样做。经过两天的互联网搜索,我认为这是给定选项的最佳解决方案。
    猜你喜欢
    • 1970-01-01
    • 2023-03-15
    • 1970-01-01
    • 1970-01-01
    • 2011-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-25
    相关资源
    最近更新 更多