2011-01-10 5 views

Antwort

2

Das Problem ist nicht der Typ, Umwandlung per se - es ist, dass Sie eine Abfrage ausgeführt haben, die mehrere Ergebnisse zurückgeben können, aber Sie wollen nur ein Einzel Ergebnis.

Sie möchten wahrscheinlich überprüfen, dass die resultierende Liste genau einen Wert hat (0 bedeutet, dass Login nicht gefunden wurde; mehr als 1 bedeutet wahrscheinlich, dass irgendwo ein Problem in Ihren Daten ist) und geben dann diesen ersten Wert zurück (return (ILogin) list.get(0);).

Als etwas separate Angelegenheit, sollten Sie nicht die Daten direkt in Ihre Abfrage wie IMO einschließen. Verwenden Sie Abfrageparameter, die recht einfach in dem Ruhezustand ist:

String query = "SELECT email, id FROM Login WHERE email=? AND password=?"; 
Object[] parameters = { login.getEmail(), login.getPassword() }; 
List results = getHibernateTemplate().find(query, parameters); 
if (results.size() != 1) { 
    // Probably throw an exception 
} 
// I'm assuming your mapping has been set up appropriately such that 
// the returned value will *be* an `ILogin`. 
return (ILogin) results.get(0); 

Schließlich Sie mit ziemlicher Sicherheit nicht results wollen eine Instanzvariable sein - es soll wohl eine lokale Variable sein, wie pro mein Beispiel oben.

+0

Vielen Dank für die Hilfe, können Sie in diese Frage, die ich jetzt nach der Aktualisierung bekomme http://StackOverflow.com/Questions/4646548/error-Java-Lang-ClassCastexception – theJava

+0

Ja, aber in der "neuen" Frage Sie haben die Auswahl nicht geändert, um keine Liste zurückzugeben. Und eine Liste kann nicht in ILogin umgewandelt werden –

1

Der Dummy-Weg ist zu verwenden getHibernateTemplate().find(query).get(0);, aber dies wird zu einer Ausnahme führen, wenn keine solche Anmeldung gefunden wird.

Wie Jon sagte, überprüfen Sie Ihre Abfrage für die Leere.

1

Ich nehme den Frühling :).

List resultsList = getHibernateTemplate().find(query); 
if (resultsList.size() == 1) { 
results = (ILogin)resultsList.get(0); 
} else { 
// error no entity or mutiple entities 
} 

return results. 

Dies sollte funktionieren.

Verwandte Themen