JPA 2.1,Eclipselink,SQL Server,Spring - NamedStoredProcedureQuery结果映射

时间:2016-04-26 15:16:36

标签: sql-server spring eclipselink jpa-2.1

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

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

有没有办法避免所有锅炉板代码映射参数然后手动映射结果集?由于共享存储过程,我的能力有限。

我正在寻找一些示例,说明如何使用实体为没有OUT参数或Cursor的存储过程映射结果。 (我怀疑这是不可能的,但我希望听到那些使用这些的时间超过我(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

1 个答案:

答案 0 :(得分: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();