假设,我需要根据某些条件使用 Hibernate 计算数据库表中的行数,我可以org.hibernate.criteria像下面这样使用。
@Service
@Transactional(readOnly = true, propagation=Propagation.REQUIRES_NEW)
public final class StateDAO implements StateService
{
    private SessionFactory sessionFactory;
    public void setSessionFactory(SessionFactory sessionFactory)
    {
        this.sessionFactory = sessionFactory;
    }
    @Override
    @SuppressWarnings("unchecked")
    public Object rowCount(String id)
    {
        return sessionFactory.getCurrentSession()
              .createCriteria(State.class)
              .setProjection(Projections.rowCount())
              .add(Restrictions.eq("countryId", Long.parseLong(id)))
              .uniqueResult();
    }
}
它根据id通过 Spring 提供的行数来计算行数。
这也可以通过使用类似的 HQL 查询来实现。
sessionFactory.getCurrentSession()
              .createQuery("select count(*) as cnt from State where countryId=:id")
              .setParameter("id", Long.valueOf(id).longValue())
              .uniqueResult();
哪个更好且更常见(关于性能和其他方面)?