关于java:Hibernate本机查询返回List对象列表

Hibernate native query return List Object List

我正在使用一个hibernate的NQL查询,该查询为我提取了两列:

1
2
3
4
5
6
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; cannot be cast to
java.lang.String

当我尝试显示列表中的结果时,在运行时

。我也尝试在列表中使用String数组,但是它不起作用。以下是我的代码段,它们给出错误:

当我仅使用List时:

1
2
List<String> Thumbnailpaths = pathquery.list();
System.out.println(Thumbnailpaths.get(i).replace("\","\\\\\"));

在编译时没有错误,如果保持原样,也没有任何问题,但是要显示的行上方显示类广播异常。

当我使用列表数组时:

1
2
3
List<String[]> Thumbnailpaths = pathquery.list();

System.out.println(Thumbnailpaths.get(i)[0].replace("\","\\\\\"));

在运行时再次出现类广播异常

Criteria.ALIAS_TO_ENTITY_MAP根本没有帮助,因为它使逻辑变得更加复杂。我只需要数据库表中的2列值。

请告诉我是否有解决方案可以在NQL中获取多列结果,然后放入列表中。

注意:看起来这里没有显示泛型,并且只在我的代码段中写入了列表


是的,在这种情况下,hibernate将返回对象数组(Object [])-返回多列。但是您仍然可以使用"实体查询"返回一个实体对象,而不是"原始"值。


不幸的是,Hibernate没有提供一种标准的方法来检索表的列的结果并将其直接存储到Entity Object。您必须手动解析查询所获取的数据。

hibernate查询将返回对象数组列表,即List<Object[]>
Object[]将包含您列中的数据。列表只不过是查询检索的行。您可以参考以下代码:

1
2
3
4
5
6
7
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[]