2017-01-21 2 views
1

Ich habe diese Funktion, von der ich versuche, den Namen aus einer Tabelle mit einer SQL-Abfrage zu extrahieren.Fehler erhalten java.lang.ClassCastException: java.lang.String kann nicht in [Ljava.lang.Object;

@Override 
    @Transactional 
    public String getEmpNameFromId(long Id) { 
     final Session session = sessionFactory.openSession(); 
     String name = ""; 
     SQLQuery query = session.createSQLQuery("SELECT name from employee where id=" + Id); 
     List<Object[]> list = (List<Object[]>)query.list();//Object[] objs = (Object[])query.uniqueResult() 
     for (Iterator<Object[]> iterator = list.iterator(); iterator.hasNext();) { 
      Object[] e = iterator.next(); 
      name = (String)e[0];//case object type to another by youself... 
     } 
     return name; 
    } 

In meiner Datenbank Objekt Ich rufe diese Funktion als:

String empName = empDao.getEmpNameFromId(data.getId()); 
logger.info("name"+empName); 

Die Schnittstellenfunktion getEmpNameFromId wird als:

public interface empDao { 
    String getEmpNameFromId(long Id); 
} 

Ich erhalte die Ausnahme als:

java.lang.ClassCastException: java.lang.String cannot be cast to [Ljava.lang.Object; 

Brauche hier Hilfe.

Vielen Dank im Voraus :)

+0

Versuchen Sie stattdessen: 'name = e [0] .toString();' – DevilsHnd

+0

Überprüfen Sie erneut, wo die Ausnahme auftritt. Es beschwert sich über eine illegale Umwandlung einer Instanz von "String" in "Object []", und das passiert nicht in der Zeile, in der Sie Ihren Kommentar hinzugefügt haben. –

Antwort

1

Wenn Sie eine Spalte in der Abfrage verwenden, wird der Ergebnistyp des Elements der Liste als eine einzige Object zurückgegeben. Andernfalls, wenn viele Spalten verwendet werden, ist der Ergebnistyp Object[] pro Zeile.

Aus der Dokumentation:

public List list() throws HibernateException; 

Return die Abfrageergebnisse als List. Wenn die Abfrage mehrere Ergebnisse vor Zeile enthält, werden die Ergebnisse in einer Instanz Object[] zurückgegeben.

ändern

List<Object[]> list = (List<Object[]>)query.list(); 

zu

List list = query.list(); 

Dann wird Ihr Ergebnis sollte nur eine Zeile mit dem String Typ des Elements der List zurückzukehren.

return (String)list.get(0); 
Verwandte Themen