Wie kann ich eine gespeicherte Prozedur mit JPA & Spring Data ausführen?

9

Ich versuche, die gespeicherte Prozedur Terminal_GetTicket in meiner Datenbank aufzurufen, bekomme aber weiterhin die folgende Ausnahme:

%Vor%

Ich habe meine Konfiguration mit einer sehr einfachen Testeinheit validiert und alles scheint gut zu funktionieren, aber für den tatsächlichen Fall stimmt etwas nicht.

Hier ist meine Domäneneinheit ( TicketInfo ):

%Vor%

Alle Instanzvariablen haben ihre Getter und Setter richtig definiert, und die gespeicherte Prozedur hat insgesamt 5 Ausgabeparameter, die den Attributen von TicketInfo entsprechen.

Außerdem ist hier meine Repository-Schnittstelle:

%Vor%

Auch hier ist meine context.xml Datei (für Spring):

%Vor%

Und schließlich eine verwässerte Version der gespeicherten Prozedur selbst:

%Vor%

Nun, wenn ich versuche, die @Autowired Annotation zu setzen, bekomme ich die oben erwähnte Ausnahme.

    
Rys 13.04.2015, 18:33
quelle

2 Antworten

4

Ich erinnere mich, dass ich mit den gespeicherten MS SQL-Prozeduren und spring-data-jpa gekämpft habe. So konnte ich es erfolgreich ausführen:

Modell:

%Vor%

Das ist ziemlich einfach. Dieser Ansatz unterscheidet sich jedoch dadurch, dass Sie Prozeduren nicht direkt deklarieren (das ist auch der Grund, warum es nicht funktionieren muss, wenn Sie sich entscheiden, RDBS zu ändern).

Dann müssen Sie Ihr Repository erweitern:

%Vor%

Und implementieren Sie es direkt:

%Vor%

Lass es uns zusammenfassen:

%Vor%

Beachten Sie, dass Sie, wenn Sie beispielsweise eine Liste von Foo -Objekten zurückgeben möchten, nur den Rückgabewert in Ihrem benutzerdefinierten Repository bearbeiten.

    
SirKometa 13.04.2015 19:34
quelle
2

Ich habe SirKometas Ratschläge befolgt, aber ich konnte es nicht zum Laufen bringen, also kam ich auf etwas, das für mich funktionierte, und ich denke, dass es aus Sicht der Syntax besser ist. Erstellen Sie zuerst Ihre Entity-Klasse wie folgt:

%Vor%

Dann wäre die Implementierungsklasse des Repositorys:

%Vor%

Der Rest der Implementierung ist wie die Antwort von SirKometa oben. Denken Sie auch daran, dass Sie in Ihrer Anwendung eine EntityManager-Bean erstellen müssen , damit dies funktioniert.

    
Keyhan 22.04.2016 06:23
quelle