java - hibernate = 找不到列

标签 java hibernate orm native-sql

我正在通过 hibernate 在 java 中运行一个聚合函数,由于某种原因它给了我这个错误:

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

当我运行 MySQL 查询时,列名是 l_date 和 logins,我不明白为什么它找不到。

我已经在 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();
     }            
}

最佳答案

您需要将别名添加为:

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

然后调用query.list();

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

关于java - hibernate = 找不到列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3512714/

相关文章:

java - 为什么 JPA/Hibernate 设计了一种强制重新定义事务边界的方法,即使对于一个插入/更新数据库语句也是如此?

java - 分离/逐出具有非持久化子对象的对象树

java - getImage()/drawImage() 使 Java-Applet 停止工作

用于类重定向的 Java 代码反射和外观生成

java - 在 java 中使用 Apache POI 从数字单元格中读取整数

java - hibernate : One-to-many bi-directional mapping storing

java - 有没有办法以可配置的方式将字段视为@Transient?

javascript - Waterline ORM - 检查数组属性是否包含值

Django:获取相关对象的相关对象并传递给模板

c# - 将用户页面添加到托管网站