我有一个返回Object
toString()
方法显示我的对象有两个BigDecimal
属性。但我不知道如何在代码中获取它们?
我的函数使用hibernate从查询中获取结果:
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
答案 0 :(得分:3)
obj.getClass().getDeclaredFields()
可以帮到你。一般学习反射API。如果你对象bean,你也可以使用Jackarta BeanUtils。
答案 1 :(得分:1)
<强>更新强>
您有一个包含2列的结果集。
Object[] result= query.list().get(0);
BigDecimal number1 = (BigDecimal) result[0];
BigDecimal number2 = (BigDecimal) result[1];
答案 2 :(得分:1)
首先通过
获取该对象的类名System.out.println(obj.getClass());
由于您正在运行SQL查询,因此结果可能是Entity
或Object[]
。
当您从查询中了解检索到的对象时,Object[]
可以像
if( obj instanceof Object[] ) {
Object[] objA = (Object[])obj;
for(Object atomicObj : objA ) {
System.out.println(atomicObj);
}
}
它适用于对象数组中出现的所有元素。这次您可能会获得BigDecimal,下一个查询可能会返回String
和BigDecimal
。
答案 3 :(得分:1)
根据您的评论判断,您的对象是对象数组。
因此,您应首先将结果转换为Object数组:
Object[] obj = (Object[]) query.list().get(0);
然后,你应该可以像这样访问第一个BigDecimal:
BigDecimal b = (BigDecimal) obj[0];
您可能希望添加一些异常处理。
答案 4 :(得分:1)
它不是一个Object,它是一个对象数组。
BigDecimal firstColumn = (BigDecimal) ((Object[])query.list().get(0))[0];
BigDecimal secondColumn = (BigDecimal) ((Object[])query.list().get(0))[1];
就是这样。