我想从数据库中获取值,在我的情况下,我使用List从数据库中获取值,但是我收到了这个错误
ex = (java.lang.ClassCastException) java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to com.gates.cloud.model.StaffAttendanceTemp
这是我的清单:
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());
这是我的循环
for (StaffAttendanceTemp attendanceTemprecursive : attendanceTempList) {
Date timePunchin = null;
Date timeBreakout = null;
Date timeBreakin = null;
Date timePunchout = null;
Date tarikhPunch = null;
for (StaffAttendanceTemp attendanceTemp2recursive : attendanceTempList2) {
}
}
如何解决这个问题?
答案 0 :(得分:1)
问题来自:
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();
如您所见,ds.doQuery()
返回一个对象,在这种情况下返回List<Object>
而不是List<StaffAttendanceTemp>
类。因此发生错误是因为没有适当的步骤,无法将Object类强制转换为自定义类。
一般规则如下:
如果select包含单个表达式并且它是一个实体,那么结果 是那个实体
如果select包含单个表达式,则它是a 原始的,然后结果是原始的
如果select包含多个 表达式,然后结果是包含相应的Object [] 原语/实体因此,在您的情况下,列表是一个列表。
您可以参考:
您可以尝试的解决方案之一是将查询更改为:
List<StaffAttendanceTemp> attendanceTempList = ds.doQuery("SELECT distinct a FROM StaffAttendanceTemp a"
+ " WHERE a.staf.stafPK.companyid = :companyid")
.setParameter("companyid", this.getSession().getCompanyid()).getResultList();
或者如果你真的只想要一个特定的参数,你需要处理这样的对象:
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
}