Interaktion zwischen Java, JPA und gespeicherten Prozeduren: Ein Vergleich
Java-Anwendungen können über verschiedene Methoden mit gespeicherten Prozeduren interagieren. Dieser Artikel konzentriert sich auf JPA und CallableStatement
und vergleicht deren Ansätze, Vorteile und SQL-Syntax.
JPA und CallableStatement
: Ein detaillierter Blick
JPA 2.1 führte die Unterstützung gespeicherter Prozeduraufrufe ein. Im Gegensatz zu CallableStatement
vereinfacht JPA den Prozess durch die automatische Handhabung der Parameterzuordnung, was zu saubererem, besser wartbarem Code führt.
Aufruf gespeicherter Prozeduren: SQL-Syntax
Um die gespeicherte Prozedur getEmployeeDetails
mit JPA aufzurufen, verwenden Sie dieses SQL:
<code class="language-sql">{call getEmployeeDetails(?,?)}</code>
Die ?
-Platzhalter stellen Eingabeparameter dar (hier employeeId
und companyId
).
Anschauliches JPA-Beispiel
Dieser Codeausschnitt demonstriert die Aufruffunktion gespeicherter Prozeduren von JPA:
<code class="language-java">Query query = em.createNativeQuery("{call getEmployeeDetails(?,?)}", EmployeeDetails.class) .setParameter(1, employeeId) .setParameter(2, companyId); List<EmployeeDetails> result = query.getResultList();</code>
CallableStatement
Ansatz
Im Gegensatz dazu erfordert CallableStatement
eine manuelle Parameterregistrierung und -ausführung:
<code class="language-java">CallableStatement cstmt = connection.prepareCall("{call getEmployeeDetails(?,?)}"); cstmt.setInt(1, employeeId); cstmt.setInt(2, companyId); ResultSet rs = cstmt.executeQuery();</code>
JPA Best Practices
{call sp_name(?,?)}
.resultSetMapping
oder geben Sie eine Ergebnisklasse an.Wichtige Überlegungen
Die Aufruffunktionen gespeicherter Prozeduren von JPA weisen im Vergleich zu CallableStatement
Einschränkungen auf. Insbesondere wird der direkte OUT-Parameterzugriff nicht unterstützt und die Rückgabe mehrerer Ergebnismengen ist nicht zulässig.
Das obige ist der detaillierte Inhalt vonWie unterscheiden sich JPA und CallableStatement beim Aufruf gespeicherter Prozeduren in Java?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!