問:hibernate, select name, count(*) from table group by name。這句話應該怎麼用HQL語句執行?或者在hibernate中該怎麼查出每個name對應的count?
答:String hql = "select name, count(*) from table group by name"; //跟sql語句差不多的,不過這裏的name是類的屬性,table 是類名,因爲HQL是面向對象的查詢的語言。
首先要獲得session,你懂的,
然後 Query query = session.createQuery(hql);
List list = query.list();
獲取list裏面的name :
Iterator it = lits.iterator();
if(it.hasNext()){
Object[] obj = (Object[]) it.next();
String name = obj[0];
int count = obj[1];
}
在項目開發中的具體情況:
//關鍵是處理count映射問題。120221 hjl
String q = "select userId, nickName, count(id) from BbscsLogintimes where LoginYear = ? and LoginMonth = ? group by userId order by col_2_0_ desc";
Query query = session.createQuery(q);
query.setLong(0, Long.valueOf(year));
query.setLong(1, Long.valueOf(mon));
List list = query.list();
//封裝
List list2 = new ArrayList();
BbscsLogintimes logintimes= null;
Iterator it = list.iterator();
long j = 1;
while(it.hasNext()){
logintimes = new BbscsLogintimes();
Object[] obj = (Object[]) it.next();
logintimes.setOrderId(j);
logintimes.setOrderName((String) obj[1]);
logintimes.setOrderNum((Integer)obj[2]);
list2.add(logintimes);
j++;
}
以上轉載自:http://simpledev.iteye.com/blog/1433282
此爲本人項目中的具體代碼:(***DaoImpl.java)
需求:查詢出 ××人(字段:userId)購買了 ×× (字段:number)注幸運碼
@Override
public List<UserLottery> listUserLotteryQuantity(int drawNum) {
Query query = entityManager.createNativeQuery("SELECT ul.user_id, count(ul.user_id) AS numQuantity FROM user_lottery_history ul WHERE ul.draw_num =:drawNum GROUP BY ul.user_id ORDER BY ul.user_lottery_history_id DESC LIMIT 10")
.setParameter("drawNum", drawNum);
List list = query.getResultList();
List<UserLottery> ulList = new ArrayList<UserLottery>();
UserLottery ul = null;
User user = null;
Iterator it = list.iterator();
while(it.hasNext()) {
Object[] obj = (Object[]) it.next();
ul = new UserLottery();
user = new User();
user.setUserId(((BigInteger) obj[0]).longValue());
ul.setUser(user);
ul.setNumber(obj[1].toString());
ulList.add(ul);
}
return ulList;
}