Spring+Hibernate:java.lang.ClassCastException: java.util.ArrayList

来源:百度知道 编辑:UC知道 时间:2024/07/16 11:03:32
这是我的DAO的按名字查询的代码
public User queryName(String username1){
return (User)getHibernateTemplate().find(hql,username1);
}

不知道为什么总是报错
java.lang.ClassCastException: java.util.ArrayList
com.UMS.dao.impl.UserDAOImpl.queryName(UserDAOImpl.java:34)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
java.lang.reflect.Method.invoke(Unknown Source)
org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflaction(AopUtils.java:301)
org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:172)
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:139)
org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:107)
org.springframework.aop.fram

getHibernateTemplate().find(hql,username1);
这个方法返回的是ArrayList类型的数据,是不能转型为User类型的。
你可以
List list = getHibernateTemplate().find(hql,username1);
User user = (User)list.get(0);
以这种方式获取

find方法返回的是List,不是User对象。

public User queryName(String username1){
List list = getHibernateTemplate().find(hql,username1);
if(!list.isEmpty()){
return (User)list.get(0);
}else{
return null;
}
}

你查询后返回的是list对象,不是User对象。你可以先返回public List queryName(String username1),然后再把User对象取出。返回对象不能转换的错误。

(User)session.createQuery("from User where username='"+username1+"'").uniqueResult();这个方法可以取出一个对象的信息.你的问题是把一种对象强制转换成了另一总对象.
在转换的时候不会报错,但是在你使用的时候就会发生java.lang.ClassCastException:这个异常!