Hibernate计算具有一些标准的行

假设我有一个表人员,我想计算那些“birthDate”不为空且他们是学生的人。 假设我有两列:

birthDate Date (can be null) isStudent boolean (default: false) 

我怎么能用hibernate做这个..?

 Criteria crit = session.createCriteria(Person.class); crit.add( Restrictions.isNotNull("birthDate")); crit.add( Restrictions.eq("isStudent", true)); crit.setProjection(Projections.rowCount()); Integer count = (Integer)crit.uniqueResult(); 
 Criteria crit = session.createCriteria(Person.class); crit.add( Restrictions.isNotNull("birthDate")); crit.add( Restrictions.eq("isStudent", true)); List students = crit.list(); Integer count = students.size(); 

或者如果只想要一个计数值,并且没有返回列表:

 Criteria crit = session.createCriteria(Person.class); crit.setProjection(Projections.rowCount()); crit.add( Restrictions.isNotNull("birthDate")); crit.add( Restrictions.eq("isStudent", true)); return (Long) crit.uniqueResult(); 
 Number count = (Number) session.createQuery( "select count(p.id) from Person p" + " where p.birthDate is not null and p.isStudent = true").uniqueResult(); 
 int result= (int)((long)session.createQuery("select count(p) from User p where p.mobileNumber = :pMobileNumber") .setParameter("pMobileNumber", mobileNumber).uniqueResult()); 

用它。 它的工作原理

 public class IncIncidentListGridModel { private String historyStatus = null; public String getHistoryStatus() { return historyStatus; } public void setHistoryStatus(String historyStatus) { this.historyStatus = historyStatus; } public void run() { IncIncidentListGridModel resultCount = (IncIncidentListGridModel) ((SQLQuery) hibersession .createSQLQuery("select count(ch.incident_capa_history_id) as historyStatus from incident_capa_history ch, incident_capa ic where ic.incident_capa_id = ch.FK_incident_capa_id and ic.incident_capa_id='011'")) .addScalar("historyStatus", Hibernate.STRING) .setResultTransformer( Transformers.aliasToBean(IncIncidentListGridModel.class)) .uniqueResult(); System.out.println("count result" + resultCount.getHistoryStatus()); } }