我正在使用 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 语句的字段列表中添加?