我正在使用一个hibernate 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中
在我尝试显示列表中的结果时的运行时。我也尝试在列表中使用String数组,但它不起作用。以下是我的错误代码片段:
当我只使用List时:
List<String> Thumbnailpaths = pathquery.list();
System.out.println(Thumbnailpaths.get(i).replace("\\", "\\\\"));
编译时没有错误,如果保持原样,也没有错误,但是在显示的行上面会给出一个classcast异常。
当我使用List数组时:
List<String[]> Thumbnailpaths = pathquery.list();
System.out.println(Thumbnailpaths.get(i)[0].replace("\\", "\\\\"));
这里再次运行时的classcast异常
Criteria.ALIAS_TO_ENTITY_MAP
也没有任何帮助,因为它使逻辑变得更加复杂。我只需要数据库表中的2个列值。
如果有任何解决方案可以在NQL中获取多列结果然后放入列表中,请告诉我。
注意:看起来这里的generics没有显示,只有List正在我的代码片段中写入
答案 0 :(得分:1)
是的,hibernate将为这种情况返回Object数组(Object []) - 返回多个列。但你仍然可以使用"Entity queries"来返回一个实体对象而不是&#34; raw&#34;值。
答案 1 :(得分:0)
不幸的是,Hibernate没有提供一种标准方法来检索表列的结果并直接存储到Entity Object。您必须手动解析查询提取的数据。
hibernate查询将返回对象数组列表,即List<Object[]>
。
Object[]
将包含您列中的数据。列表只是查询检索的行。在您的情况下,您可以参考以下代码:
List<Object[]> Thumbnailpaths = pathquery.list();
for(Object[] objArr : Thumbnailpaths)
{
String objName = (String)objArr[0];
String objNameLocation = (String)objArr[1];
System.out.println(objName + " : " +objNameLocation);
}
以上代码将帮助您解析object[]