Alle Kunden mit ihren Adressen mit JPQL ausgeben

Status
Nicht offen für weitere Antworten.

saramaus

Neues Mitglied
Hallo Leute,

ich habe schon seit Tagen ein Problem. Ich möchte gerne eine Abfrage in Java Persistence Query Language ausgeben. Hierbei möchte ich alle Kunden mit Ihren Adressen ausgeben.

Mit Native SQL funktioniert es. Wie z.B. mit diesem Code:

Code:
Query o = em.createNativeQuery("SELECT * FROM `customer` Inner Join `address` ON `address`.`ID` = `customer`.`HOMEADDRESS_ID` ");
            List result = o.getResultList();
            Iterator ite = result.iterator();
       
            while (ite.hasNext())
            {
                Object obj = ite.next();
                System.out.println(obj);
            }

Bei Java Pesistence Query Language funktioniert es nicht:

Code:
Query alle = em.createQuery("SELECT c, p FROM Customer c, Address p WHERE c.homeAddress = p.id");
            List listealle = alle.getResultList();
            Iterator itlistealle = listealle.iterator();
            
            while (itlistealle.hasNext())
            {
                Object obj = itlistealle.next();
                System.out.println(obj);
            }

Hier bekomme ich nur die Objekte angezeigt:

[Ljava.lang.Object;@6295eb
[Ljava.lang.Object;@609959
[Ljava.lang.Object;@1f3ce5c
[Ljava.lang.Object;@1712b3a
[Ljava.lang.Object;@cd2e33
[Ljava.lang.Object;@9446e4

Ich habe 2 Klassen: Customer und Address

in Customer sieht die toString()-Methode wie folgt aus:

Code:
public String toString()
    {
        return "Kunde : " + firstname + " " + lastname + " "+ telephone+"  "+ email+" ";
    }

in Address sieht die toString()-Methode wie folgt aus:

Code:
public String toString()
    {
        return "Adresse : " + street + "  " + zipcode + " "+ city+"  "+ country+"";
    }

Wäre schön, wenn jemand hier einen Fehler sieht. Ich bin der Meinung , dass die Abfrage in JPQL richtig ist, denoch bekomme ich nur Objekte ausgegeben, trotz den toString()-Methoden.

Ihr könnt mich auch unter dieser Adresse erreichen: sarajusti@freenet.de

Danke!

Liebe Grüße

Sara
 
Das Ergebnis deiner JPQL Abfrage ist eine Liste von Arrays mit jeweils zwei Elementen (Kunde und Adresse). Die Ausgabe sieht so aus, weil toString() von Arrays nur die Referenz ausgibt.

So kannst du es ausgeben
Code:
...
while (itlistealle.hasNext()) 
{ 
   Object[] obj = (Object[])itlistealle.next(); 
   System.out.println(obj[0] + " - " + obj[1]); 
}
...

Besser wäre aber folgendes
Code:
public class Kunde
{
   ...
   private Set<Adresse> adressen = new HashSet<Adresse>();

   ...
}

Query query = em.createQuery("SELECT DISTINCT c FROM Customer c JOIN FETCH c.adressen");

List<Kunde> kunden = query.getResultList();

for( Kunde kunde : kunden )
{
   System.out.println(kunde);
   for( Adresse adresse : kunde.getAdressen())
   {
      System.out.println("   " + adresse);
   }
}

Gruß,
semi
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben