我正在尝试从数据库中检索值并将其存储在List
,
数据被检索并正常工作,但当我将List
转换为Object<pojo class>
时,我得到了一个例外,
我的代码是
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
的异常,我不知道为什么,我试过它在编译时没有显示错误。
任何建议都将不胜感激....
答案 0 :(得分:5)
我看到您正在进行选择性查询 - 选择fname
,lname
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]);
}
我更喜欢第一种方法
答案 1 :(得分:1)
在上面提到的行中,我得到了Exception作为ClassCastException,i 不知道为什么,我试过它在编译时没有显示错误。
当您显式转换时,编译器无法帮助您。类型转换是告诉编译器您知道此类型是其他类型的方法。编译器相信您知道自己在做什么。
这里真正的问题是如何创建列表?
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()返回一个List?您刚刚运行了一条SQL语句并跳转到了List。由于强制转换为List工作正常,因此显然返回了一个List(尽管由于类型擦除,我们不知道它实际上是否只包含Personaldetails对象)。
必须返回一个List。 @sanbhat似乎已经指出了该方法的正确结构。我对Hibernate没有任何经验。