2

我有一个返回一个函数Object

toString()方法表明我的对象有两个BigDecimal属性。但我不知道如何在代码中获取它们?

在此处输入图像描述

我的函数使用休眠从查询中获取结果是:

public Object executeQuery(final String sql) {
    final Query query = getSessionFactory().getCurrentSession().createSQLQuery(sql);
    return query.list().get(0);
}

谢谢你。

-- 附加信息:

obj.getClass().getDeclaredFields(); // empty array []
obj.getClass().getName();           // [Ljava.lang.Object;
final BigDecimal b = (BigDecimal) obj[0]; //Compilation error: The type of the expression must be an array type but it resolved to Object
4

5 回答 5

4

obj.getClass().getDeclaredFields()能帮你。一般学习反射API。如果你反对 bean,你也可以使用 Jackarta BeanUtils。

于 2013-01-17T17:44:00.727 回答
2

从您的评论来看,您的 Object 是和 Object 数组。

因此,您应该首先将结果转换为 Object 数组:

Object[] obj = (Object[]) query.list().get(0);

然后,您应该能够像这样访问第一个 BigDecimal:

BigDecimal b = (BigDecimal) obj[0];

可能,您想添加一些异常处理。

于 2013-01-17T17:57:01.810 回答
1

更新:

您有一个包含 2 列的结果集。

Object[] result= query.list().get(0);
BigDecimal number1 = (BigDecimal) result[0];
BigDecimal number2 = (BigDecimal) result[1];
于 2013-01-17T17:49:04.657 回答
1

首先获取该对象的类名

System.out.println(obj.getClass());

由于您正在运行 sql 查询,因此结果可能是Entityor Object[]

当您知道从查询中检索到的对象是一个时,Object[]您可以像这样迭代

if( obj instanceof Object[] ) {
       Object[] objA = (Object[])obj;
       for(Object atomicObj : objA ) {
         System.out.println(atomicObj);
       }
}

它适用于对象数组中出现的所有元素。这次你可能会得到 BigDecimal,下一个查询可能会返回一个Stringand BigDecimal

于 2013-01-17T17:52:12.653 回答
1

它不是一个对象,它是一个对象数组。

BigDecimal firstColumn = (BigDecimal) ((Object[])query.list().get(0))[0];
BigDecimal secondColumn = (BigDecimal) ((Object[])query.list().get(0))[1];

就这样。

于 2013-01-17T17:58:13.107 回答