2010-08-18 8 views
3

J'exécute une fonction d'agrégation en java par mise en veille prolongée et pour une raison quelconque, il me donne cette erreur:Hibernate = colonne not found

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

Quand je lance MySQL interroge les noms de colonnes sont l_date et les connexions et Je n'arrive pas à comprendre pourquoi il ne le trouve pas.

J'ai testé la requête dans MySQL et vérifié qu'elle fonctionne. Ma fonction ressemble à ceci.

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(); 
    }    
} 

Répondre

5

Vous devez ajouter des alias comme:

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

puis appelez Query.list();

Cela devrait fonctionner correctement. addScalar fait partie de SqlQuery.

+0

Existe-t-il une alternative à l'ajout d'addScalar? – Kathir

Questions connexes