假设,我需要根据某些条件使用 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();
哪个更好且更常见(关于性能和其他方面)?