java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to xxx.action.entity.Categoryat chentailei.action.test.SSH_CategoryDao.findByParentId(SSH_CategoryDao.java:61)at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)at java.lang.reflect.Method.invoke(Method.java:597)at org.junit.internal.runners.TestMethod.invoke(TestMethod.java:59)at org.junit.internal.runners.MethodRoadie.runTestMethod(MethodRoadie.java:98)at org.junit.internal.runners.MethodRoadie$2.run(MethodRoadie.java:79)at org.junit.internal.runners.MethodRoadie.runBeforesThenTestThenAfters(MethodRoadie.java:87)at org.junit.internal.runners.MethodRoadie.runTest(MethodRoadie.java:77)at org.junit.internal.runners.MethodRoadie.run(MethodRoadie.java:42)at org.junit.internal.runners.JUnit4ClassRunner.invokeTestMethod(JUnit4ClassRunner.java:88)at org.junit.internal.runners.JUnit4ClassRunner.runMethods(JUnit4ClassRunner.java:51)at org.junit.internal.runners.JUnit4ClassRunner$1.run(JUnit4ClassRunner.java:44)at org.junit.internal.runners.ClassRoadie.runUnprotected(ClassRoadie.java:27)at org.junit.internal.runners.ClassRoadie.runProtected(ClassRoadie.java:37)at org.junit.internal.runners.JUnit4ClassRunner.run(JUnit4ClassRunner.java:42)at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:46)at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
原因:
介面輸出標籤如:${categorys.name},需要的是:List<Category>,而HIbernate回呼函數返回的是Object[],兩者予盾。
解決:
1.將輸出類型List<Category>,變更為:List<Object[]>,變更頁面輸出${categorys[1]},詳細對比數組元素的位置;
2.將回呼函數返回的Object[],強轉為:List<Object[]>(不能強轉為 List<Category>,因為SQL語句是多表串連查詢,執行後會報上述錯誤),然後再遍曆,通過Category對象賦值(即將 Object[]的元素值賦予Category屬性),再添加至List<Category>,轉碼如下:
//執行回調對象,擷取結果集List<Object[]> list = (List)this.getHibernateTemplate().execute(action);//轉換List<Category> prolist = new ArrayList<Category>();for(int i=0; i<list.size(); i++){ Object[] obs=list.get(i); Category cate = new Category(); cate.setId((Integer)obs[0]); cate.setTurn((Integer)obs[1]); cate.setName((String)obs[2]); cate.setEnName((String)obs[3]); cate.setDescription((String)obs[4]); cate.setParentId((Integer)obs[5]); cate.setPnum((BigInteger)obs[6]); prolist.add(cate);}