[Ljava.lang.Object; cannot be cast to com.gxuwz.check.entity.SysClasses
今天在写ssh项目的时候遇到了这样一个问题,我在数据库通过连表查询A老师下的所有班级的时候,把查出来的所有内容(所有字段)放到List里面,代码如下:
/**
* @title: queryClasses* @description: 查询教师下的所有班级* @param user*/
@Override
public List<SysClasses> queryClasses(String userid) {String hql = "from SysClasses c,SysTeacher t " + "where c.userId = t.userId and c.userId = ?";Session session = getSession();Query query = session.createQuery(hql);query.setString(0, userid);List<SysClasses> list = query.list();session.close();return list;
}
然后在前台用el表达式,即对象.属性的方法 ${list.className} 取值得时候总是显示不出来数据,而且还有报错,报错信息如下:(前提是我只想要className属性,只有SysClasses表中有而SysTeacher表中没有)
java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to com.gxuwz.check.entity.SysClassescom.gxuwz.check.action.LoginAction.execute(LoginAction.java:69)sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)java.lang.reflect.Method.invoke(Method.java:498)com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:452)com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:291)com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:254)com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:176)com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
报错的意思是:Object类型不能够转换成这个实体类SysClasses类型。
之后就开始研究打断点测试
先添加两行代码进行测试,代码如下:
@Override
public List queryClasses(String userid) {
String hql = "from SysClasses c,SysTeacher t " + "where c.userId = t.userId and c.userId = ?";Session session = getSession();Query query = session.createQuery(hql);query.setString(0, userid);List<SysClasses> list = query.list();for(int i = 0;i<list.size();i++) {list.get(i);}session.close();return list;
}
断点测试如下:
我们发现通过连表查询之后返回的Object对象,这是为什么呢?因为只有Object才能够存储任意类型数据和多个字段的数据,何况这里有两张表的数据。
下面详细说一下:
如图上标记的1所示:
Object[10],Object根据表中有的数据自动分配足够的10个空间
如图上标记的2所示:
[0],代表的是上面10个下标中的0号下标的值
[0]=Object[2],意思是把Object[2]中的数据赋值给上面1中的Object[0]:这里体现了分表存储,下面再说
如图上标记的3、4所示:
Object[2]中又存储着两个实体类SysClasses和SysTeacher
以上证明,有几张表的话就自动划分成几个实体类存放到Object中:
我们可以做一下测试,看到底是不是这样自动分配的:
果然,在我又新添加一个查询列表SysUserLogin之后,下面箭头处的Object有3条数据了
所以说呢,我们在前台用List对象.属性的方式是取不出来的,因为List对象是一个Object类型
jsp页面的部分代码如下:
<s:iterator id="id" value="classSet" var="list"><li><a href="Check_stuList.action" target="right"><span class="icon-caret-right"></span>${list.className}</a></li>
</s:iterator>
那到底怎么样才能够取到值呢?怎么样将Object转换成SysClasses呢?前提说好,是不能将Object转换成SysClasses,但是我们可以这样做
代码实例如下:
@Overridepublic List<SysClasses> queryClasses(String userid) {String hql = "from SysClasses c,SysTeacher t " + "where c.userId = t.userId and c.userId = ?";Session session = getSession();Query query = session.createQuery(hql);query.setString(0, userid);List<Object> list = query.list();//将查出来的某一条记录放到Object中List<SysClasses> slist = new ArrayList<SysClasses>();SysClasses c = new SysClasses();for(int i=0;i<list.size();i++){Object[] a = (Object[]) list.get(i);//list.get(0)的时候包括a[0]SysClasses a[1]SysTeacher,如之前图的讲解slist.add((SysClasses) a[0]);//将list.get(0)中的两个实体类分别放到Object[0]和Object[1]中,每一次都将SysClasses取出来即a[0],放到List<SysClasses> slist}session.close();return slist;}
代码详细讲解:
我们的目的是每次都取到红色箭头处这个实体类:上代码一行一行来
第一轮for循环
Object[] a = (Object[]) list.get(i);
list.get(0)的值为 [0]=Object[2] (id=159)这个整体,这里面还有值。将其赋给a对象
slist.add((SysClasses) a[0]);
a[0]为SysClasses下面的所有数据
最终添加到slist这个List类型的对象中
第二轮for循环
Object[] a = (Object[]) list.get(i);
list.get(1)的值为 [1]=Object[2] (id=160)这个整体,这里面还有值。将其赋给a对象
slist.add((SysClasses) a[0]);
a[0]为SysClasses下面的所有数据
最终添加到slist这个List类型的对象中
以此类推哈!
这样我们就能取到值了
如果此文对你有帮助记得点赞哦!转载请附上博主文章地址
https://mp.csdn.net/mdeditor/103286771
[Ljava.lang.Object; cannot be cast to com.gxuwz.check.entity.SysClasses相关推荐
- hql投影查询之—— [Ljava.lang.Object; cannot be cast to cn.bdqn.guanMingSys.entity.Notice
最近在做项目中遇到一个简单的问题,但是解决了好久,问题就是投影查询. 先来看看出现的异常: java.lang.ClassCastException: [Ljava.lang.Object; cann ...
- 关于Object数组强转成Integer数组的问题:Ljava.lang.Object; cannot be cast to [Ljava.lang.Integer;...
一.当把Object数组,强转的具体的Integer数组时,会报错. 代码如下: //数组强转报错演示 Object[] numbers = {1,2,3};Integer[] ints = (Int ...
- 关于java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to 实体类
由于业务逻辑的复杂,有些sql语句写法hql不支持,所以hibernate查询直接用了sql原生查询,由于数据结果根据四个表查询出来,所以无法使用方法.addEntity(XXXXXXX.class) ...
- java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [Ljava.lang.String,toArray向下转型失败
问题: 将集合通过toArray转为Object[]数组后,再通过向下转型失败 源代码: public void test(){List<String> list = new ArrayL ...
- Ljava.lang.Object; cannot be cast to……异常
这是因为类型无法转换抛出的异常. 在hibernate框架中,使用了select语句,没有指定返回数据类型,所以默认为Object类,它是所有类的父类.所以当我们遍历list的时候,Object无法转 ...
- java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to
本例错误是Hibernate产生 Session session= sessionFatory.getCurrentSession(); SQLQuery sqlquery= session.crea ...
- 解决:java.lang.ClassCastException:[Ljava.lang.Object
java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to com.alibaba.domain.Person解决方法: p ...
- org.hibernate.transientobjectexception:The given object has a null identifier: com.gxuwz.check.entit
错误信息: org.hibernate.TransientObjectException: The given object has a null identifier: com.gxuwz.chec ...
- 在拦截器中获取请求参数,[Ljava.lang.String; cannot be cast to java.lang.String报错
Map<String,Object> parametersmap=invocation.getInvocationContext().getParameters();//获取请求参数 ...
最新文章
- python下线程以及锁
- tomcat的jdbc连接池PoolExhaustedException
- 最详细的Mac下安装nacos教程来了
- php全局cors,PHP开启CORS - slagga的个人页面 - OSCHINA - 中文开源技术交流社区
- mysql5.1安装失败_解决MySQL5.1安装时出现Cannot create windows service for mysql.error:0
- java游戏暂停_小白写了个java的小游戏 想加个暂停的功能 无从下手 求大佬们帮...
- 如何解压POSIX tar archive文件
- 思科 Security Manager 12个0day PoC 被公开,多个严重 0day仍未修复
- POJ 3133 Manhattan Wiring(插头DP)
- 三种DDL的简述:create、alter、drop
- 根据输入时间判断年龄是否在18~68周岁之间
- Modelsim查看中间变量
- 如何利用数字化工具提高工作效率?
- k8s 集群全部更换机器 IP
- 2021 年年度蕞佳开源软件!
- 【EasyRL学习笔记】第五章 Proximal Policy Optimization 近端策略优化算法
- Python简介及入门
- SpringBoot请求报403 Forbidden
- 和警察蜀黍拍照像“抓捕现场”?效哥告诉你正确拍照姿势!
- 计算机技术应用体验,2018教师信息技术应用体验学习个人心得体会2篇