使用Hibernate我有一个看起来像这样的HQL查询:
String myQuery = " SELECT code,((max(mid)/min(mid))-1)*100
FROM ExchangeRate
WHERE effectivedate >= '2017-09-01'and effectivedate <= '2017-10-22'
group by name, code order by 2 desc "
通过此查询,我想在给定时间内(2017-09-01至2017-10-22)以最大的差异记录ExchangeRate的代码。由于我只需要一个速率,因此我对查询设置了限制并使用uniqueResult()方法下载结果。
Session session = CRUDSessionFactory.getSessionFactory().openSession();
Query q = session.createQuery(myQuery);
q.setMaxResults(1);
Object code = q.uniqueResult();
问题是收到第一列值&#39;代码&#39;作为一个字符串,它是我的Postgress数据库中的varchar,但我似乎无法找到一个合适的解决方案,因为还有第二列BigDecimal作为数据类型。在使用调试和变量窗口时,变量代码得到正确的值,如下所示:
Variable window in debugg mode
使用以下命令对数组之类的目标代码进行攻击:
String myCode = code[0];
这显然不起作用,因为变量不是数组。
编辑:
对我有用的是将Object类型从uniqueResult()转换为Object数组,然后使用该数组的第一个值:
Object[] code = (Object[]) q.uniqueResult();
String myCode = (String) code[0];