Collections Cast bei ArrayList (List)

manon3

Neues Mitglied
Hallo,

ich habe ein (Anfänger) Problem. Ich arbeite mit Hibernate und lade mir einen Datensatz meiner Klasse (Tabelle) "Friends". Ich benutze dazu einen SQL Query, der mir eine Liste von <Friends>-Objekten erzeugt. Die Abfrage funktioniert, der entsprechende Datensatz ist in der Liste enthalten.

Java:
List<Friends> l = new ArrayList<Friends>();
 l = this.sessionFactory.getCurrentSession().createSQLQuery("SELECT * FROM friends WHERE friends.accepted=1").list();

Nun gebe ich die Liste zurück und möchte im Quellcode ein Friends-Objekt rausholen und abfragen, aber das funktioniert einfach nicht:

Java:
List<Friends> l = new ArrayList<Friends>();
l = projectDao.getAcceptedFriendsByUid(projectDao.getUsersByUsername(username).getId());

ArrayList<String> f = new ArrayList<String>();
Friends fr;
// oder Friends fr = new Friends();

// sobald ich hier angelange, bekomme ich eine Fehlermeldung
// keine dieser vier Zeilen lässt sich ausführen
fr = l.get(i);
fr = (Friends) l.get(i);             
String un1 = fr.getUsersByAUsersId().getUsername();
String un2 = l.get(i).getUsersByAUsersId().getUsername();

Die Fehlermeldung lautet:

Java:
java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to project.backend.hibernate.Friends

Was mache ich falsch? Ich sehe, dass das Objekt mit seinen Daten darin vorhanden ist, aber ich komme einfach nicht ran! Die Lösung ist ganz sicher total einfach und es wäre super, wenn mir jemand einen Hinweis geben könnte! Vielen Dank!
 
"SELECT * FROM friends WHERE friends.accepted=1"
liefert eine Liste von Object[] mit jeweils einem Friends-Objekt drin oder allen Feldern einzeln,
weiß nicht genau, kannst du dir genauer anschauen falls interessant

"FROM friends WHERE friends.accepted=1"
liefert eine Liste von Friends

----

query.list() liefert eine Liste oder null, auf jeden Fall wird etwas neues in die Variable l gesetzt, genauso bei anderen Methodenaufrufen,
es ist unnötig, dass du anscheinend an mindestens 2 Stellen vorher eine neue ArrayList erzeugst, die geht in jedem Fall verloren,

schreibe etwa
List<Friends> l = null;
l = this.sessionFactory.........
oder
List<Friends> l;
l = this.sessionFactory.........
oder
List<Friends> l = this.sessionFactory.........

du schreibst ja auch
String un1 = fr.getUsersByAUsersId().getUsername();
und nicht
String un1 = "hier schonmal ein String";
un1 = fr.getUsersByAUsersId().getUsername();
 
Zuletzt bearbeitet von einem Moderator:
Endlich... es funktioniert

Java:
List<Friends> l = this.sessionFactory.getCurrentSession().createQuery("FROM Friends friends WHERE friends.accepted=1").list();

Klassennamen (Friends) groß, sonst funktioniert es nicht

vielen Dank!
 

Zurück
Oben