ある条件に基づいて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();
(パフォーマンスやその他の点で)どちらが優れていて通常ですか?