Warum brauchen wir erstellen native query?
Arbeite ich in einem Projekt verwendet JPA ORM und-framework bietet zwei Arten von Methode, um Abfragen zu erstellen.
- entityManager.createQuery(Abfrage1);
- entityManager.createNativeQuery(query2);
Verstehe ich die Art von query-string übergeben werden, Sie zu benutzen, aber ich weiß nicht genau, warum brauchen wir erstellen native query? Wahrscheinlich wollen wir nicht verwenden, ORM-Funktionen gibt es?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Brauchen Sie nicht zu erstellen, die eine native Abfrage, es sei denn, Sie wollen. JPQL schließlich übersetzt wird in SQL durch den Rahmen, aber der Rahmen können Sie rufen Sie die native query auch. Warum würde wollen, dass:
createQuery verwendet JPAs eigene query Sprache, die Sie auswählen, von Klassennamen anstelle der Tabellennamen. Dies ist nicht SQL, es ist nur ähnlich, und wird später umgewandelt in echte SQL. Mapping zu java-Klassen werden automatisch ausgeführt und die tatsächlichen Klassen-Instanzen zurückgegeben werden, als Ergebnis.
createNativeQuery verwendet real SQL, und nicht in der Lage sein zu verwenden JPA-features. Diese Methode wird allgemein verwendet, wenn Sie brauchen, um etwas wirklich seltsam, dass ist nicht unterstützt von JPA. Eine Liste von Object[] zurückgegeben werden, und das mapping der java-Objekte müssen manuell durchgeführt werden. In anderen Worten, wie das arbeiten mit einer DB vor dem PPV kam, nur etwas bequemer, da connection handling erfolgt automatisch.
Ich habe es verwendet für die Optimierung Zwecke. Verwenden von Nativen Abfragen bedeutet, dass die ORM-mapping ist nicht vorhanden, und statt der JPQL, verwenden Sie den DB ' s native syntax. So, wie @RasmusFranke auch darauf hingewiesen, wenn Sie etwas brauchen, dass ist nicht unterstützt von JPA (wie wenn Sie verwenden möchten, DB-herstellerspezifische Erweiterungen, die im Prinzip eine schlechte Idee, da der PPV ist, um DB-agnostischen, aber passiert trotzdem. Ich weiß,...)
Der andere Nebeneffekt ist, dass durch die Verwendung von nativen Abfragen, nur der angegebene Abfrage ausgeführt wird. Nein, eifrig abrufen von anderen Entitäten, oder andere unerwünschte Dinge. Auf diese Weise, wenn Sie sich mit riesigen Mengen von Objekten können Sie sparen, heap space.