JPA-QL getResultList() auswerten bei Inner-Joins

PaterHuber

Mitglied
Liebe NG, ich mache gerade meine ersten Gehversuche mit "JPA-QL" uns habe folgenden Code vor mir liegen:
Java:
    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
Code:
objekte.get(i)
nun auch
Code:
nachname
,
Code:
vorname
und
Code:
ort
bekomme?

Ich habe es mit "casten" versucht, was aber nicht funktioniert hat:
Java:
    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:
Java:
[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
 
S

SlaterB

Gast
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

Top Contributor
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 :)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
pusteblume inner join Data Tier 3

Ähnliche Java Themen


Oben