# Alle Kunden mit ihren Adressen mit JPQL ausgeben



## saramaus (20. Dez 2008)

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:*


```
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:*


```
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:*


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

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


```
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


----------



## Guest (20. Dez 2008)

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
	
	
	
	





```
...
while (itlistealle.hasNext()) 
{ 
   Object[] obj = (Object[])itlistealle.next(); 
   System.out.println(obj[0] + " - " + obj[1]); 
}
...
```

Besser wäre aber folgendes
	
	
	
	





```
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


----------



## saramaus (21. Dez 2008)

Es hat dieses Mal funktioniert. Ich habe mich so sehr auf die Abfragen konzentriert.
Danke   :applaus:


----------

