繁体   English   中英

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

[英]Hibernate native query return List Object List

我正在使用一个休眠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<String[]> Thumbnailpaths = pathquery.list();

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

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

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

请让我知道是否有任何解决方案可以在NQL中获取多列结果,然后放入列表中。

注意:看起来这里没有显示泛型,而我的代码段中只写了List

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

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

休眠查询将返回对象数组列表,即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[]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM