In JPA 2.0 können wir entityManager.createnativeQuery () native SQL -Anweisungen verwenden. Wenn unser Abfrageergebnis jedoch keine entsprechende Entitätsklasse hat, gibt query.getResultlist () eine Liste <Objekt []> zurück. Das heißt, die Daten jeder Zeile werden als Objektarray zurückgegeben.
Die übliche Verwendung ist Folgendes:
public void testNativeQuery () {query query = entityManager.createMativeQuery ("ID, Name, Alter von t_user"); List rows = query.getResultlist (); für (Objektzeile: Zeilen) {Object [] Cells = (Object []) Zeile; System.out.println ("id =" + Zellen [0]); System.out.println ("name =" + Zellen [1]); System.out.println ("Age =" + Zellen [2]); }}Auf diese Weise wird der Code sehr schwer zu verstehen. Was genau ist ein Element mit einem Index von 0? Es ist nicht bekannt, ob Sie die Anweisung der Abfrage nicht zählen. Sobald die Anweisung der Abfrage angepasst ist, muss der Java -Code ebenfalls gemeinsam angepasst werden. Zu diesem Zeitpunkt denken wir, dass es viel klarer zu verwenden ist, wenn die Karte zurückgegeben wird.
Leider bietet die API von JPA keine solche Einstellung. Tatsächlich unterstützen viele zugrunde liegende JPA -Implementierungen die Rückgabe von Kartenobjekten.
Zum Beispiel:
EclipSelinks query.setHinT (queryHints.result_type, resultType.map); Hibernate .setResulttransformer (Transformers.alias_to_entity_map);
Wenn wir also die Karte zurückgeben und feststellen möchten, dass die zugrunde liegende Ebene eine bestimmte JPA-Implementierung verwendet, können wir den nächsten Schritt unternehmen und Kreuzimplementierungsfunktionen opfern, um unsere Anforderungen zu erfüllen:
public void testNativeQuery () {query query = entityManager.createMativeQuery ("ID, Name, Alter von t_user"); query.unwrap (sqlQuery.class) .setResulttransformer (Transformers.alias_to_entity_map); List rows = query.getResultlist (); für (Objekt obj: Zeilen) {map row = (map) obj; System.out.println ("id =" + row.get ("id")); System.out.println ("name =" + row.get ("name")); System.out.println ("age =" + row.get ("Alter")); }}Abfrage gibt die Schreibmethode des angegebenen Entitätsrückgabe -Typs zurück
Query query = entityManager.createnativeQuery ("ID, Name, Alter von T_USER", user.class);Hier ist zu beachten, dass die Verwendung von MAP definitiv weniger effizient ist als die Verwendung von Objektarrays. Sie müssen also sehen, ob der Leistungsabfall innerhalb des akzeptablen Bereichs liegt. Dann werden in meiner Hibernate 4.2.x -Umgebung, unabhängig davon, ob Sie Großbuchstaben oder Kleinbuchstaben in Ihrem nativen SQL schreiben, die zurückgegebenen Feldnamen aktiviert. Natürlich können Sie die Feldnamen auf eine bestimmte Weise verarbeiten, indem Sie den Ergebnistransformator anpassen und sogar das von Ihnen benötigte Pojo zurückgeben.
Die obige Methode, um JPAs Abfrage -Abfrage -Schnittstelle zurückzugeben, ist der gesamte Inhalt, den ich mit Ihnen teile. Ich hoffe, Sie können Ihnen eine Referenz geben und ich hoffe, Sie können wulin.com mehr unterstützen.