0

我正在尝试从数据库中检索值并将其存储List

数据已被检索并正常工作,但是当我将其List转换Object<pojo class>为时,我得到一个 Exception ,

我的代码是

Query qry=session.createQuery("select personaldetails.fname,personaldetails.lname from Personaldetails as personaldetails where refId=1001");
List<Personaldetails> l=(List<Personaldetails>)qry.list();
session.getTransaction().commit();
session.close();
System.out.println("--->"+l.size());  //List 'l' holds the values from DB
Personaldetails p; //This is an pojo class
p=(Personaldetails)l.get(i);  //Here i am getting the exception here
System.out.println("Person name "+p.getFname());

在上面提到的行中,我得到了异常ClassCastException,我不知道为什么,我尝试编译时没有显示错误。

任何建议将不胜感激......

4

2 回答 2

5

我看到您正在做选择性查询 - 即 select fnamelname

select personaldetails.fname,personaldetails.lname from Personaldetails as personaldetails where refId=1001

它返回List<Object[]>数组中的每个元素代表 2 列值的位置

列表将类似于[{"Fname1", "LName1"}, {"Fname2", "Lname2"}]

ClassCastException是由于您正在转换Object[]PersonDetails.

  • 期望List<PersonDetails>结果,您可以使用查询

    select from Personaldetails as personaldetails where refId=1001

  • 或者您可以遍历并自己List<Object[]>构建PersonDetails

    for(Object[] arr : l) {
       PersonDetails p = new PersonDetails();
       p.setFName(arr[0]);
       p.setLName(arr[1]);
    }
    

我更喜欢第一种方法

于 2013-09-18T12:28:18.053 回答
1

在上面提到的行中,我得到了 Exception as ClassCastException ,我不知道为什么,我试过它在编译时没有显示错误。

当您显式转换时,编译器无法帮助您。类型转换是你告诉编译器你知道这个类型是其他类型的方式。编译器相信你知道你在做什么。

这里真正的问题是列表是如何创建的?

Query qry=session.createQuery("select personaldetails.fname,personaldetails.lname from Personaldetails as personaldetails where refId=1001");
List<Personaldetails> l=(List<Personaldetails>)qry.list();

你怎么知道 qry.list() 返回一个列表?您刚刚运行了一条 SQL 语句并跳转到了一个列表。由于转换为 List 工作正常,显然实际上返回了 List (尽管由于类型擦除,我们不知道它是否实际上只包含 Personaldetails 对象)。

它必须返回一个列表。@sanbhat 似乎已经为您指出了该方法的正确结构。我对 Hibernate 没有任何经验。

于 2013-09-18T12:33:51.817 回答