【发布时间】:2016-09-09 09:02:00
【问题描述】:
我正在使用一个休眠 NQL 查询,它获取我两列:
SELECT object_name,
object_name_location
FROM dbo.object_stacks
WHERE object_id IN (SELECT thumb_nail_obj_id
FROM dbo.uois
WHERE Upper(NAME) LIKE Upper('%testobj%'))
当我只选择一列时,即只选择对象名称 - 一切正常,但有两列时出现错误
java.lang.ClassCastException: [Ljava.lang.Object;不能转换为 java.lang.String
在运行时我尝试显示列表中的结果。我也尝试在列表中使用字符串数组,但它不起作用。下面是我的代码 sn-ps 给出错误:
当我只使用 List 时:
List<String> Thumbnailpaths = pathquery.list();
System.out.println(Thumbnailpaths.get(i).replace("\\", "\\\\"));
编译时没有错误,如果保持原样,但在上面显示的行会给出类转换异常。
当我使用列表数组时:
List<String[]> Thumbnailpaths = pathquery.list();
System.out.println(Thumbnailpaths.get(i)[0].replace("\\", "\\\\"));
这里又是运行时的classcast异常
另外,Criteria.ALIAS_TO_ENTITY_MAP 也无济于事,因为它使逻辑更加复杂。我只需要数据库表中的 2 个列值。
如果有任何解决方案可以在 NQL 中获取多列结果然后放入列表中,请告诉我。
注意:这里似乎没有显示泛型,我的代码 sn-p 中只写了 List
【问题讨论】:
-
当您尝试从数据库返回元组列表时,查询返回
List<Object[]>(不是List<String[]>)(这就是异常消息的含义)。 -
解决了。我使用对象数组时得到了准确的结果:Object[] data = Thumbnailpaths.get(i);
标签: java hibernate list collections