Hibernate =未找到列

Iam*_*ksy 4 java orm hibernate native-sql

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

INFO Binary:182 - could not read column value from result set: l_date; Column 'l_date' not found. 
Run Code Online (Sandbox Code Playgroud)

当我运行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();
     }            
}
Run Code Online (Sandbox Code Playgroud)

Ank*_*sal 6

您需要添加别名:

query.addScalar("l_month");
query.addScalar("logins");
Run Code Online (Sandbox Code Playgroud)

然后调用query.list();

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