JPA 2.1、Eclipselink、SQL 服务器、Spring - NamedStoredProcedureQuery 结果映射

JPA 2.1, Eclipselink, SQL Server, Spring - NamedStoredProcedureQuery result mapping

使用 javax 或 eclipse link @NamedStoredProcedureQuery,我想调用一个 sql 服务器存储过程,它没有游标或输出参数和 return结果集,而无需手动映射结果。

当我使用 springs @Procedure 时,会自动添加一个 OUT 参数,并且我从数据库中收到错误消息,说我的参数太多,这是有道理的。如果我不这样做,我只能 return 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

您看过 StoredProcedureQuery 的文档了吗?如果您的程序 returns 一个结果集,如果您在创建查询时指定 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();