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

标签 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 --> 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 即可解决。

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

最佳答案

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

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

要了解此函数如何返回单个对象(这次不是数组),请参阅 doc .

关于java - 需要将通过 jpa 获取的 uniqueresult 转换为 String 数组的解决方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35468129/

相关文章:

java - 如何在流中查找字符串数组的值

java - 使用 Java 是开发基于 GUI 的会计应用程序的合适语言/平台吗?

java - 具有私有(private)构造函数的 Singleton 类的 Spring(创建 bean 时出错,没有可见的构造函数)

java - 如何使用 spring boot 和 jpa 一起软删除父级和子级(级联)

java - 如何改进这种分层架构?

java - 哈希表/插入新键和值

java - 为什么我需要在 Hibernate 中进行事务以进行只读操作?

java - 如何正确编写 HQL

java - 即使在 timeToLiveSeconds 和/或 timeToIdleSeconds 之后,Ehcache 也不会从缓存中删除元素

hibernate - @ManyToOne 单向映射