# JPA-QL getResultList() auswerten bei Inner-Joins



## PaterHuber (15. Dez 2011)

Liebe NG, ich mache gerade meine ersten Gehversuche mit "JPA-QL" uns habe folgenden Code vor mir liegen:

```
Query q2 = em
    .createQuery("SELECT k.nachname, k.vorname, k.wohnort.ort FROM Kunde AS k");
    List<?> objekte = q2.getResultList();

    for (int i = 0; i < objekte.size(); i++)
    {
      System.out.println();
      System.out.println(objekte.get(i));
    }
```
Was muss ich tun, damit ich nun von 
	
	
	
	





```
objekte.get(i)
```
 nun auch 
	
	
	
	





```
nachname
```
, 
	
	
	
	





```
vorname
```
 und 
	
	
	
	





```
ort
```
 bekomme?

Ich habe es mit "casten" versucht, was aber nicht funktioniert hat:

```
Query q2 = em
    .createQuery("SELECT k.nachname, k.vorname, k.wohnort.ort FROM Kunde AS k");
    List<?> objekte = q2.getResultList();

    for (int i = 0; i < objekte.size(); i++)
    {
      System.out.println();
      System.out.println(objekte.get(i));
      System.out.println(((Kunde)objekte.get(i)).getNachname());
      System.out.println(((Kunde)objekte.get(i)).getVorname());
      System.out.println(((Adresse)objekte.get(i)).getOrt());
    }
```
Fehlermeldung:

```
[Ljava.lang.Object;@18488ef
Exception in thread "main" java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to de.jpahibernate.model.Kunde
```


Das schaut mir nach einem typischen Anfängerfehler aus, oder?


Danke für eure Hilfe schon mal vorab
Gruss; PATRICK


----------



## SlaterB (15. Dez 2011)

in der Tat, einen der wichtigsten Fehler, die man beim Programmieren machen kann:
kannst du die Fehlermeldung nicht lesen und dann weiter nachdenken?
so kommst du ja überall nicht voran, 
die Fehlermeldung besagt: objekte.get(i) ist ein Object[], welches du nicht auf Kunde casten kannst,
ergibt sich daraus nicht alles weitere?

falls du Kunde-Objekte in der Ergebnisliste haben willst, geht evtl. etwas (zumindest in Hibernate HQL) in Richtung
[c]SELECT new package.Kunde(k.nachname, k.vorname, k.wohnort.ort) FROM ...[/c]
sofern passender Konstruktor vorhanden ist,

ich empfehle dazu aber, nicht die gefährlichen persistierbaren Mapping-Klassen zu verwenden, 
sondern andere 'leichtgewichtige' Dummy-Klassen, entweder KundeXy, also zu jeder wichtigen DB-Klasse eine Kopie-Klasse,
mit Nachteil der Codeverdopplung, 
siehe auch
Data transfer object - Wikipedia, the free encyclopedia
Transferobjekt ? Wikipedia

oder irgendeine allgemeine Klasse für Ergebnisse, z.B. hier TrippleString, aber das ist dann schon nahe dem standardmäßig zurückgegebenen Object[], nur vielleicht etwas komfortabler


----------



## KSG9|sebastian (16. Dez 2011)

würde ein einfacher em.createQuery("from Kunde k") nicht ausreichen?

Wenn ich mir das Problem so anschaue sind DTOs glaub ich zu weit in die Ferne gegriffen


----------

