需要解决方案将通过jpa获取的uniqueresult转换为String数组

时间:2016-02-17 21:28:14

标签: java hibernate jpa entity hibernate-annotations

当通过hibernate获取多行时,我使用下面的逻辑来读取每个行条目。使用Hibernate 4和Websphere 7

@SuppressWarnings("unchecked")
List<Object[]> objectList = new ArrayList<Object[]>(query.getResultList());\

for (Object[] record : objectList) {
    String entry1 = (String.valueOf(record[0]));
    String entry2 = (String) record[1];
}

现在我正在尝试获取一行。当试图施放它失败时。

Object[] result = (Object[])query.uniqueResult();
if(result != null) {
    resultDetails [0] = (String)result[0];
    resultDetails [1] = (String)result[1];
}

当尝试将String []设置为实体时,它会因显而易见的原因而失败。 String []不能用作实体。

尝试将对象复制到数组

Object[] result = (Object[])query.uniqueResult();
logger.info(result + " -- Length --> " + result.length);

上述2语句的输出是 [Ljava.lang.Object; @ 41a841a8 - Length - &gt; 2

跟随声明复制未通过的数组

String[] resultDetails = Arrays.asList(result).toArray(new String[result.length]);

即使使用copyof也失败了     Arrays.copyOf(result,result.length,String [] .class);

需要了解解决方法。哪个有效,无需创建新的实体类

----更新为我的解决方案。

  Object[] result = (Object[])query.uniqueResult(); int i = 0;
  quoteOwnerDetails= new String[result.length];
  for(Object obj : result){
     System.out.println(obj);
     quoteOwnerDetails[i] = obj.toString(); i++;
  }

我发现第二个值是整数,因为案件失败了。对各个值执行toString可以解决它。

如果您在创建新的Entity类旁边有任何其他解决方案,请更新。

3 个答案:

答案 0 :(得分:2)

调用uniqueResult 时,您要求使用单个对象,因此不会返回任何数组。您的代码可以写成:

Object result = query.uniqueResult();
if(result instanceof String) {
    resultDetails [0] = (String)result;
}

要查看此函数如何返回单个对象(此时不是数组),请参阅此doc

答案 1 :(得分:1)

   List<Object[]> objectList = new ArrayList<Object[]>(query.getResultList()); //You already have this np

    ArrayList<Object> so = new ArrayList<Object>();     
    for (Object[] row : objectList) {           
        so.add(row[0]);         
    }
    ArrayList<String> ok = new ArrayList<String>();
    for (int i = 0; i < so.size(); i++) {
        String o = (String) so.get(i);
        ok.add(new String(o)); //if you dont do new String(o), hibernate may cry
    }

瞧!这个位于第0位的ArrayList ok得到了你想要的东西(希望如此)。

答案 2 :(得分:1)

----更新了适用于我的解决方案代码。

在大多数情况下,调用toString方法比使用实例检查更好,然后键入强制转换为String。

  Object[] result = (Object[])query.uniqueResult(); int i = 0;
  quoteOwnerDetails= new String[result.length];
  for(Object obj : result){
     System.out.println(obj);
     quoteOwnerDetails[i] = obj.toString(); 
     i++;
  }

我发现第二个值是整数,因为铸件失败了。对各个值执行toString可以解决它。

结果集java的返回类型主要是Integer或String,它们都允许toString获取值。