使用Hibernate从数据库中检索选定的字段

时间:2013-01-17 21:25:12

标签: spring hibernate hql

我正在使用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();
}

我在这里提取了两个字段categoryIdcategoryImage,这些字段在给定的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

1 个答案:

答案 0 :(得分:1)

列表的返回类型应为List。当只有一列回来时,hibernate不会将结果放入和Object []