2016-04-26 13 views
0

Mit javax oder eclipse link @NamedStoredProcedureQuery möchte ich eine gespeicherte SQL Server-Prozedur aufrufen, die keinen Cursor oder out-Parameter hat und die Ergebnismenge ohne zurückgeben um die Ergebnisse manuell zuzuordnen.JPA 2.1, Eclipselink, SQL Server, Spring - NamedStoredProcedureQuery Ergebniszuordnung

Wenn ich Federn @Procedure verwende, wird automatisch ein OUT-Parameter hinzugefügt und ich bekomme einen Fehler zurück von der Datenbank, der sagt, dass ich zu viele Parameter habe, was Sinn macht. Wenn ich es nicht tue, kann ich nur void zurückgeben, aber dann habe ich keine Möglichkeit, die Ergebnisse zu erhalten.

Gibt es eine Möglichkeit, den Code der Kesselplatte zu vermeiden, indem die Parameter zugeordnet werden und die Ergebnismenge manuell zugeordnet wird? Ich habe begrenzte Fähigkeit, die gespeicherten Prozeduren zu ändern, da sie geteilt werden.

Ich bin auf der Suche nach einem Beispiel für die Zuordnung von Ergebnissen mit einer Entität für eine gespeicherte Prozedur, die keinen OUT-Parameter oder einen Cursor hat. (Ich vermute, dass es nicht möglich ist, aber ich würde gerne von jemandem hören, der diese länger benutzt als ich (2 Tage))

PS Ich habe dies mit Oracle gemacht gesehen, aber sie hatten ein Out-Parameter definiert.

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

Antwort

1

Haben Sie die Dokumentation für StoredProcedureQuery gesehen? Wenn Ihre Prozedur eine Ergebnismenge zurückgibt, funktioniert getResultList, wenn Sie beim Erstellen der Abfrage resultClasses oder resultSetMappings angeben, falls diese erforderlich sind.

Etwas wie:

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

Das ist, was ich am Ende mit. Ich hatte gehofft, die Parameter nicht manuell abbilden zu müssen, da ich ein paar hundert davon schreiben muss und das @Procedure das erlaubt. Nach zwei Tagen, in denen ich das Internet durchforstet habe, halte ich dies für die beste Lösung. – blur0224