gpt4 book ai didi

java.lang.ClassCastException : [Ljava. lang.Object;不能转换为类名

转载 作者:行者123 更新时间:2023-11-29 10:10:39 24 4
gpt4 key购买 nike

代码:

public void getDetails() {
try {
Session session = sessionFactory.openSession();
Transaction transaction = session.beginTransaction();
String hql = "select c.mobile, c.password FROM CrbtSubMasterDemo c where rownum<20";
Query query = session.createQuery(hql);
List<CrbtSubMasterDemo> itr = query.list();
session.getTransaction().commit();
for (CrbtSubMasterDemo pojo : itr) {//excepion line
System.out.println("[" + pojo.getMobile() + "]");
}
} catch (Exception e) {
e.printStackTrace();
}
}

CrbtSubMasterDemo 是与数据库的 pojo 映射。当我尝试运行它时,它给出了以下异常:

java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to com.telemune.demoPojo.CrbtSubMasterDemo
at com.telemune.demoHibernate.QueryTester.getDetails(QueryTester.java:57)
at com.telemune.demoHibernate.QueryTester.main(QueryTester.java:23)

问题是 query.list() 正在返回 pojo 类的对象列表。那为什么是这个Exception。我是 Hibernate 的新手,很抱歉这是一个愚蠢的问题。

最佳答案

当你这样写的时候:

String hql = "select c.mobile, c.password FROM CrbtSubMasterDemo c where rownum<20";

您的结果集不是 CrbtSubMasterDemoList

试着写:

String hql = "select FROM CrbtSubMasterDemo c where rownum<20";

另一种方法是定义一个新的 CrbtSubMasterDemo 构造函数,您只传递两个字段 c.mobile, c.password

因此您的查询变为:

String hql = "select new " + CrbtSubMasterDemo.class.getName() + "(c.mobile, c.password) FROM CrbtSubMasterDemo c where rownum<20";

如果您遵循此解决方案,请记住也添加一个默认构造函数(不带参数),因此在您的 pojo 中您有:

public CrbtSubMasterDemo(String mobile, String password) {
this.mobile = mobile;
this.password = password
}

public CrbtSubMasterDemo() {
}

关于java.lang.ClassCastException : [Ljava. lang.Object;不能转换为类名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36883895/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com