我正在使用Hibernate从Oracle数据库中检索包含所选字段的行列表。在我的应用程序中的一个DAO中通过以下方法进行检索。
@SuppressWarnings("unchecked")
public List<Object[]> getOldFileName(String []ids)
{
int len=ids.length;
Long longType[]=new Long[len];
for(int i=0;i<len;i++)
{
longType[i]=Long.valueOf(ids[i]);
}
return sessionFactory.getCurrentSession().createQuery("select catId, catImage from Category where catId in(:id)").setParameterList("id", longType).list();
}
我在这里提取了两个字段categoryId
和categoryImage
,这些字段在给定的HQL查询中列出,基于作为catId
数组提供的String[]
方法参数通过Spring。它工作正常,毫无疑问。
但是根据我的要求,再次检索catId
是完全没必要的,我想从查询中的字段列表中删除catId
,如下所示。
select catImage from Category where catId in(:id)
如果我尝试执行此查询,则接下来调用Spring控制器类中的前一个方法
String temp[]=request.getParameter("setDel").split(",");
List<Object[]> oldFileNames = categoryService.getOldFileName(temp);
//Invokes the preceding method in DAO.
导致抛出以下异常,
java.lang.ClassCastException:java.lang.String无法强制转换为 [Ljava.lang.Object;
异常消息表明java.lang.String
无法强制转换为对象数组 - Object[]
。似乎HQL语句只尝试获取String类型的单个值,而不是检索List<Object[]>
。
我只想删除从数据库中检索其名称后存储在目录中的文件,并且完全没必要在HQL中的字段列表中提及catId
。
为什么我需要在此场景中的HQL语句字段列表中添加catId
?
答案 0 :(得分:1)
列表的返回类型应为List。当只有一列回来时,hibernate不会将结果放入和Object []