Frage

Ich verwende JPQL Daten abzurufen. Ich kann Daten mit der Anweisung bekommen

List persons = null;
persons = em.createQuery("select p.albumName from PhotoAlbum p , Roleuser r 
where r = p.userId and r.userID = 1");

Jetzt kann ich die Albumnamen dieses:

int i=0;
for (i=0;i<persons.size(); i++)
{   
     System.out.println("Testing n "+ i +" " +  persons.get(0));
}

Jetzt möchte ich den Namen des Albums bekommen und die Zeile namens firstname der roleuser

Ich bin mit der Abfrage

persons = em.createQuery("select r.firstName , p.albumName from PhotoAlbum p ,   
Roleuser r where r = p.userId and r.userID = 1").getResultList();

Nun, wie bekomme ich die Zeilen Vornamen und Albumnamen als persons.get (0) zurückgibt ein Objekt

durch den Code ausgeführt wird:

 for (i=0;i<persons.size(); i++)
    {
        //r = (Roleuser) persons.get(i);
        System.out.println("Testing n "+ i +" " + persons.get(i));
    }

Ich erhalte diese:

Testing n 0 [Ljava.lang.Object;@4edb4077
INFO: Testing n 1 [Ljava.lang.Object;@1c656d13
INFO: Testing n 2 [Ljava.lang.Object;@46dc08f5
INFO: Testing n 3 [Ljava.lang.Object;@654c0a43

Wie kann ich die persons.get(0) Karte und die firstname und albumname bekommen?

War es hilfreich?

Lösung

  

Nun, wie gehen die Zeilen Vornamen und Albumname als persons.get (0) zurückgibt ein Objekt

Abfragen mit mehreren select_expressions in der SELECT-Klausel eine Object[] zurückkehren (oder eine List von Object[]). Aus der JPA-Spezifikation:

  

4.8.1 Ergebnistyp der SELECT-Klausel

     

Der Typ des Abfrageergebnisses angegeben   durch die SELECT-Klausel einer Abfrage ist ein   Einheit abstrakter Schematyp, ein   state-Feldtyp, das Ergebnis einer   Aggregatfunktion, das Ergebnis eines   Baubetrieb oder einige   Folge davon.

     

Der Ergebnistyp der SELECT-Klausel   wird durch die den Ergebnistypen definiert   die select_expressions enthalten in   es. wenn mehrere    select_expressions ist in der SELECT-Klausel verwendet wird, ist das Ergebnis der Abfrage   ist vom Typ Object[] und   Elemente in diesem Ergebnis entspricht in   Um zu der Reihenfolge ihres   Spezifikation in der SELECT-Klausel und   in Art der Ergebnistypen von jedem   die select_expressions .

Also in Ihrem Fall, werden Sie wahrscheinlich so etwas wie dies wollen:

for (i=0;i<persons.size(); i++) {
    //r = (Roleuser) persons.get(i);
    System.out.println("Testing n " + i + " " + persons.get(i)[0] + ", " + 
        persons.get(i)[1]);
}

Beachten Sie, dass die Angabe eine innere Verknüpfung durch die Verwendung eines kartesisches Produkt in der FROM-Klausel und eine Join-Bedingung in der WHERE-Klausel weniger typisch als eine explizite Join über Entitätsbeziehungen Angabe (mit der [LEFT [OUTER] | INNER ] JOIN Syntax). Sehen Sie den ganzen Abschnitt 4.4.5 Joins in der Beschreibung.

Referenzen

  • JPA 1.0 Spezifikation
    • Abschnitt 4.8.1 "Ergebnistyp der SELECT-Klausel"
    • Abschnitt 4.8.2 "Constructor Ausdrücke in der SELECT-Klausel"
    • Abschnitt 4.4.5 "Joins"
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top