使用Hibernate HQL重新生成单个列结果

时间:2017-11-02 09:34:11

标签: java sql postgresql hibernate hql

使用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];

0 个答案:

没有答案