Hibernate本机查询返回列表对象列表

时间:2016-09-09 09:02:01

标签: java hibernate list collections

我正在使用一个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正在我的代码片段中写入

2 个答案:

答案 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[]