Hibernate计算具有一些标准的行

Kar*_*ral 11 java hibernate

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

birthDate Date (can be null)
isStudent boolean (default: false)
Run Code Online (Sandbox Code Playgroud)

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

Law*_*nce 36

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();
Run Code Online (Sandbox Code Playgroud)

  • 如果你想要两个独立的计数,你必须使用联合或子查询,因此在休眠中使用一些别名。因为您需要根据特定条件进行分组 (2认同)

Nim*_*sky 14

Criteria crit = session.createCriteria(Person.class);
crit.add( Restrictions.isNotNull("birthDate"));
crit.add( Restrictions.eq("isStudent", true));
List<Person> students = crit.list();
Integer count = students.size();
Run Code Online (Sandbox Code Playgroud)

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

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(); 
Run Code Online (Sandbox Code Playgroud)

  • 我更喜欢标准而不是连接字符串,如果你把sql写成字符串,imho,就会失去hibernate的目的. (5认同)
  • 你获取整个列表只是为了知道它的大小?为什么在基本 HQL 查询就足够时使用 Criteria? (2认同)