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