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

Need solution for casting uniqueresult fetched through jpa to String array

当通过休眠获取多行时,我使用以下逻辑来读取每一行条目。使用 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 -- 长度 --> 2

以下复制数组的语句失败

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

即使使用 copyof 也失败了 Arrays.copyOf(结果, result.length, 字符串[].class);

需要了解解决方法。无需创建新实体即可工作 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 即可解决。

除了创建新实体之外,如果您有任何其他解决方案,请更新 class。

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

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

要查看此函数如何 returns 单个对象(这次不是数组),请参阅此 doc

   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 得到了你想要的(希望如此)。

---- 更新代码作为解决方案对我有用。

在大多数情况下,调用 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 的 return 类型主要是 Integer 或 String,它们都允许 toString 获取值。