当通过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类旁边有任何其他解决方案,请更新。
答案 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获取值。