2010-08-18 88 views
3

我通过Hibernate,由于某种原因它给我这个错误运行Java中的聚合函数:休眠=列

INFO Binary:182 - could not read column value from result set: l_date; Column 'l_date' not found. 

当我运行MySQL查询列名l_date和登录名和我无法弄清楚为什么它没有发现这一点。

我已经在MySQL中测试了这个查询,并证实它确实有效。我的功能如下所示。

public List<Logins> getUserLoginsByMonth() { 
    Session session = getSessionFactory().openSession(); 
    ArrayList<Logins> loginList = null; 

    try { 
      String SQL_QUERY = "SELECT l_date as l_month, SUM(logins) as logins FROM (SELECT DATE_FORMAT(login_time, '%M') as l_date, COUNT(DISTINCT users) as logins FROM user_logins WHERE login_time > DATE_SUB(NOW(), INTERVAL 1 YEAR) GROUP BY DATE(login_time)) AS Z GROUP BY(l_month)"; 

      Query query = session.createSQLQuery(SQL_QUERY); 
      List results = query.list(); 
      for(ListIterator iter = results.listIterator(); iter.hasNext()) { 
       Objects[] row = (Object[])iter.next(); 
       System.out.println((Date)row[0}]); 
       System.out.println((BigInteger)row[1]); 
      } 

    } 
    catch(HibernateException e) { 
     throw new PersistenceDaoException(e); 
    } 
    finally { 
     session.close(); 
    }    
} 

回答

5

您需要添加的别名:

query.addScalar("l_month"); 
query.addScalar("logins"); 

,然后调用query.list();

它应该工作正常。 addScalar是SqlQuery的一部分。

+0

是否有任何替代方法,然后添加addScalar? – Kathir 2012-12-06 14:42:32