【问题标题】:Fetching GROUP_CONCAT comma separated values using Hibernate使用 Hibernate 获取 GROUP_CONCAT 逗号分隔值
【发布时间】:2015-06-19 09:23:33
【问题描述】:

这是我迭代 module_id 的查询。 例如:1,2,3,4,5(使用 GROUP CONCAT)。

 String sql="SELECT GROUP_CONCAT(module_id) AS module_id
             FROM sox_customer_partner_modules "
          + "WHERE customer_id= :customer_id
             AND partner_id= :partner_id
             AND STATUS='1'";

我的查询执行良好,它返回结果为 1、2、3、4、5。但是当我在 java 中迭代时,它只获取第一个值,即 1

我正在使用休眠获取记录。

问题是我只能获取第一条记录。例如:1

但我想获取像 1,2,3,4,5 这样的字符串。

我的java代码是:

Session session = sessionFactory.getCurrentSession();
SQLQuery query = session.createSQLQuery(sql);
query.addScalar("module_id", Hibernate.INTEGER);
query.setParameter("customer_id", customer_id);
query.setParameter("partner_id", partner_id);

Integer module_id=0;
List<Object> CustModList = query.list();

return CustModList.toString(); //Which returns 1.. But I want 1,2,3,4,5

请帮助需要。提前致谢

【问题讨论】:

  • 我想你错过了 group by 声明。

标签: java mysql sql spring hibernate


【解决方案1】:

您应该始终使用 GROUP BY,因为传统上,MySQL has been the only RDBMS allowing optional GROUP BY predicates

使用这个查询:

String sql="SELECT GROUP_CONCAT(module_id) AS module_id
         FROM sox_customer_partner_modules "
      + "WHERE customer_id= :customer_id
         AND partner_id= :partner_id
         AND STATUS='1' 
         GROUP BY customer_id, partner_id";

当然,您应该更清楚哪些列应该标识一个组。

也改变这一行:

query.addScalar("module_id", Hibernate.INTEGER);

到:

query.addScalar("module_id", Hibernate.STRING);

【讨论】:

  • 同样的答案。在 java 中迭代的问题 itseems??.
猜你喜欢
  • 2011-12-03
  • 1970-01-01
  • 1970-01-01
  • 2017-05-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-23
  • 1970-01-01
相关资源
最近更新 更多