2016-08-09 16 views
0

ich Wert erhalten aus der Datenbank wollen com.gates.cloud.model.something, in meinem Fall habe ich Liste verwenden Sie den Wert aus der Datenbank zu bekommen, aber ich habe diesen Fehler[Ljava.lang.Object; kann nicht gegossen werden

ex = (java.lang.ClassCastException) java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to com.gates.cloud.model.StaffAttendanceTemp 

Diese meine Liste ist:

List<StaffAttendanceTemp> attendanceTempList = ds.doQuery("SELECT distinct a.staf.stafPK.kod, a.attendancedate FROM StaffAttendanceTemp a" 
    + " WHERE a.staf.stafPK.companyid = :companyid") 
     .setParameter("companyid", this.getSession().getCompanyid()).getResultList(); 

System.out.println(attendanceTempList.getClass().getSimpleName()); 

List<StaffAttendanceTemp> attendanceTempList2 = ds.doQuery("SELECT a FROM StaffAttendanceTemp a" 
    + " WHERE a.staf.stafPK.companyid = :companyid") 
     .setParameter("companyid", this.getSession().getCompanyid()).getResultList(); 

System.out.println(attendanceTempList2.getClass().getSimpleName()); 

und diese meine Schleife

ist
for (StaffAttendanceTemp attendanceTemprecursive : attendanceTempList) { 
    Date timePunchin = null; 
    Date timeBreakout = null; 
    Date timeBreakin = null; 
    Date timePunchout = null; 
    Date tarikhPunch = null; 

    for (StaffAttendanceTemp attendanceTemp2recursive : attendanceTempList2) { 
    } 
} 

wie diese zu lösen?

+0

Zunächst versuchen Sie, Ihre Frage zu verbessern, indem Sie die Details erklären. Weitere Informationen dazu, wie Sie Ihre Frage verbessern und Ihre Chancen erhöhen können, finden Sie in den Abschnitten [Hilfe] sowie in den Abschnitten [Fragen stellen] (http://stackoverflow.com/help/how-to-ask) um anständige Hilfe zu bekommen. –

+0

Kann eine weitere Methode hinzugefügt werden? Die 'ds' Methode – FreezY

Antwort

1

Das Problem kommt von hier:

List<StaffAttendanceTemp> attendanceTempList = ds.doQuery("SELECT distinct a.staf.stafPK.kod, a.attendancedate FROM StaffAttendanceTemp a" 
    + " WHERE a.staf.stafPK.companyid = :companyid") 
     .setParameter("companyid", this.getSession().getCompanyid()).getResultList(); 

Wie Sie sehen können, die ds.doQuery() ein Objekt zurückgeben, die in diesem Fall ist List<Object> und nicht List<StaffAttendanceTemp> Klasse zurück. Der Fehler tritt also auf, weil die Objektklasse nicht ohne einen geeigneten Schritt in eine benutzerdefinierte Klasse umgewandelt werden kann.

Allgemein gilt folgende Regel:

Wenn select einzelnen Ausdruck enthält, und es ist ein Unternehmen, dann führt dass Entität

Wenn select einzelnen Ausdruck enthält und es ist ein primitiv, dann ist das Ergebnis Dieses Primitive

Wenn Auswahl enthält mehrere Ausdrücke, dann ist das Ergebnis Objekt [] enthält die entsprechenden Primitiven/Entities Also, in yo Ihre Fallliste ist eine Liste.

können Sie sich hier beziehen:

JPA Entity 1

JPA query result

Einer der Lösung, die Sie versuchen können, ist die Abfrage dies ändern:

List<StaffAttendanceTemp> attendanceTempList = ds.doQuery("SELECT distinct a FROM StaffAttendanceTemp a" 
    + " WHERE a.staf.stafPK.companyid = :companyid") 
     .setParameter("companyid", this.getSession().getCompanyid()).getResultList(); 

Oder wenn Sie wirklich Willst du nur einen bestimmten Parameter, musst du mit dem Objekt so umgehen:

List<Object[]> attendanceTempList = ds.doQuery("SELECT distinct a.staf.stafPK.kod, a.attendancedate FROM StaffAttendanceTemp a" 
    + " WHERE a.staf.stafPK.companyid = :companyid") 
     .setParameter("companyid", this.getSession().getCompanyid()).getResultList(); 

for (Object[] listContent : attendanceTempList) { 
//deal with Object[] here 
} 
+0

die ds: ' öffentliche Abfrage doQuery (String-Abfrage) löst Ausnahme { try { Rückgabe entityManager.createQuery (Abfrage); } catch (Exception e) { neue Exception auslösen (new StringBuilder(). Append ("(804) Fehler in doQuery:") .append (e.getMessage()). ToString()); } } ' – Neko