0

我正在使用 Spring 3.1.0、Hibernate 4、JDK 7 到 Tomcat 7,并在 itr.next() 方法上获得 ClassCastException。aaData 对象确实包含数据。

List<CustomerList> aaData = customerlistDaoimpl.getCustomerList();

/*
 * putting data in a JSON form that DataTables recognizes
 */
String data = "{\"sEcho\": 3, \"iTotalRecords\": " + count + ",\"iTotalDisplayRecords\": " + count + ",\"aaData\": [ ";
Iterator<CustomerList> itr = aaData.iterator();
while(itr.hasNext()){
    CustomerList cl = (CustomerList) itr.next();
    data += "[\"" + cl.getName() + "\",\"" + cl.getAddress() + "\",\"" + cl.getZipcode() + "\",\"" + 
    cl.getPhone() + "\",\"" + cl.getCity() + "\",\"" + cl.getCountry() + "\",\"" + cl.getNote() + "\" ] ";
    count++;
}
data += "]}";

我的道

@SuppressWarnings("unchecked")
@Override
public List<CustomerList> getCustomerList() {
    List<CustomerList> cuList = null;
    Session session = null;

    try{
        session = sessionfactory.openSession();
        session.beginTransaction();         
        cuList = session.createSQLQuery("select * from customer_list").list();      
        session.getTransaction().commit();
    }catch (RuntimeException e){
        System.out.println(e.getMessage());
    }
    finally
    {
        if(session != null){
            session.close();                
        }
    }

    return cuList;
}

和追溯

严重:servlet [sptestjs] 在路径 [/SPTestJs] 的上下文中的 Servlet.service() 引发异常 [请求处理失败;嵌套异常是 java.lang.ClassCastException: [Ljava.lang.Object; 无法转换为 com.sptestjs.implementation.CustomerList] 的根本原因 java.lang.ClassCastException: [Ljava.lang.Object; 无法在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke 的 com.sptestjs.implementation.controller.HomeController.getCustomerList(HomeController.java:85) 的 com.sptestjs.implementation.CustomerList (未知来源)在 sun.reflect.DelegatingMethodAccessorImpl.invoke(未知来源)

我确实找到了电话

SQLQuery cuSQLQuery = session.createSQLQuery("select * from customer_list");

返回一个 SQLQuery 实例,它的列表是 Object 元素的 ArrayList 类型,其中

Query cuQuery = session.createQuery("from customer_list");

返回null

4

4 回答 4

2

从我的迭代器 next 方法中获取 ClassCastException

这意味着您aaData实际上不是List<CustomerList> 您在某处更改了类型错误的类型擦除。如果您仔细查看 ClassCastException,它将告诉您组件类型的真正含义。

java.lang.ClassCastException:[Ljava.lang.Object;无法转换为 com.sptestjs.implementation.CustomerList

这表明该类型实际上应该是

List<Object[]> cuList = session.createSQLQuery("select * from customer_list").list(); 
于 2013-08-02T05:59:32.613 回答
0

检查CustomerList您已导入的类的完全限定类名是否与您在填充列表时使用的类名相同。我很好奇为什么你仍然需要强制转换,因为你使用的是泛型 -next()应该返回与构建迭代器的类型相同的类型。换句话说,Iterator 在itr.next()被调用时总是会返回 T 的实例。

于 2013-08-03T18:13:02.417 回答
0

使用泛型 .aaData 可能包含不正确的数据

class CustomerlistDaoimpl{

public  List<CustomerList> getCustomerList(){
.....
}
}

    List<CustomerList> aaData = customerlistDaoimpl.getCustomerList();

    String data = "{\"sEcho\": 3, \"iTotalRecords\": " + count + ",\"iTotalDisplayRecords\": " + count + ",\"aaData\": [ ";
    Iterator<CustomerList> itr = aaData.iterator();
    while(itr.hasNext()){
        CustomerList cl = (CustomerList) itr.next();
        data += "[\"" + cl.getName() + "\",\"" + cl.getAddress() + "\",\"" + cl.getZipcode() + "\",\"" + 
        cl.getPhone() + "\",\"" + cl.getCity() + "\",\"" + cl.getCountry() + "\",\"" + cl.getNote() + "\" ] ";
        count++;
    }
    data += "]}";
于 2013-08-02T05:59:27.973 回答
0

解决了:

多个错误,异常具有误导性,我已经用不再存在的 sessionFactory id 限定了我的 Dao impl,同时自动连接曾经修复过的 sessionFactory 到下一个错误。将它们全部修复,项目启动并运行。

于 2013-08-06T00:43:45.530 回答