# List aus Hibernate Query



## Mawster (26. Sep 2011)

Hallo Leute !

Ich habe ein Problem... Ich hole mir 2 Werte aus einer Datenbank sid(Long) und den zugehörigen Text(String) 

Hier die Funktion dazu:

```
List<?> liste  = session.createSQLQuery(listQuery).list();
```

Das funktioniert auch onhe Probleme ich hab jetzt eine Liste von Objekten. 
Wie kann ich jetzt auf die Werte in der Liste zugreifen? =( Ich weiß echt nicht mehr weiter =(...

Ich wollte es auf List<Long,String> casten, aber das funktioniert nicht. 

Ich muss den Text von den Objekten in den Typ <SelectItem> packen für eine DropDown-Liste in einer JSF. Die zugheörige Sid brauche ich dann für weitere Abfragen.

Ich hoffe jemand kann mir helfen.

mfg
Mawster


----------



## Michael... (26. Sep 2011)

Ich vermute mal Du nutzt Hibernate. Wenn ja, wird Dir eine List mit Object Arrays zurückgeliefert und man könnte das ganz schon etwas mehr konkretisieren:

```
List<Object[]> liste  = session.createSQLQuery(listQuery).list();
```
Man kann über Einträge in 
	
	
	
	





```
liste
```
 iterieren und sich aus den Object Arrays den Wert unter Index 1 holen, der vermutlich Dein String sein sollte...

Allerdings kenne ich Hibernate nicht wirklich und es könnte durchaus sein, dass es da auch intelligentere Lösungen gibt.


----------



## Mawster (26. Sep 2011)

Ich benutze Hibernate mit Spring.

Das Problem ist, dass ich ja ein Object hab was einen Long und einen String beinhaltet und davon halt ne Liste. Ich brauch jetzt nur den String davon. Wie bekomm ich den raus? Kannst du mir da vl. nen Codeschnippsel geben? =)


----------



## Landei (26. Sep 2011)

Mawster hat gesagt.:


> Ich wollte es auf List<Long,String> casten, aber das funktioniert nicht.



Listen haben genau *einen *generischen Parameter, deshalb _kann _das nicht funktionieren. Wenn du z.B. eine Map willst, musst du die Daten manuell umschaufeln und selbst bestimmen, was Schlüssel und was referenzierter Wert ist. 

Gleiches gilt, wenn du irgendeine andere Umwandlung brauchst, etwa:


```
List<Address> addesses = getAddresses();
List<String> names = new ArrayList<String>();
for(Address address : addresses) {
   names.add(address.getName());
}
```


----------



## SlaterB (26. Sep 2011)

> Kannst du mir da vl. nen Codeschnippsel geben?
das genannte mit Object[] usw. ist schon quasi Code, sogar der Index für den String wurde schon genannt,
gar keine eigenen Ideen um davon etwas zu verstehen?


----------



## nillehammer (27. Sep 2011)

> Wie bekomm ich den raus? Kannst du mir da vl. nen Codeschnippsel geben? =)


Nimm Michaels Code:

```
// Michael Code
List<Object[]> liste  = session.createSQLQuery(listQuery).list();
```
Und mach Das:

```
for (final Object[] rowData: liste) {
  System.out.println(Arrays.deepToString(rowData);
}
```
Dann siehst Du bestimmt, was Du machen musst. Wenn man nicht weiß, was einem eine Methode genau zurück liefert, ist ein System.out.println oder der Debugger ein guter Freund. Außerdem die Dokumentation (Chapter 16. Native SQL)


----------

