0

我正在使用 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 查询中列出,基于通过 Spring 作为方法参数catId提供的数组。String[]它工作正常,毫无疑问。

但是关于我的要求,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[]>.

我只想在从数据库中检索到它们的名称后删除存储在目录中的文件,并且catId在 HQL 的字段列表中提及是完全没有必要的。

为什么catId在这种场景下需要在 HQL 语句的字段列表中添加?

4

1 回答 1

1

列表的返回类型应该是 List。当只有一列返回时,休眠不会将结果放入 Object[]

于 2013-01-17T21:49:31.730 回答