Может ли клац иметь подтипы, которые не должны учитываться?
Если нет, то не достаточно ли создать запрос на clazz?
Criteria criteria = session.createCriteria(clazz);
if (user == null) {
criteria.add(Restrictions.eq("email", email);
} else {
criteria.add(Restrictions.eq("user", user);
}
int result = (Integer) criteria.setProjection(Projections.rowCount()).uniqueResult();
Теперь я угадываю, как выглядит ваше отображение (что есть свойства "email" и "user").
Если это не работает, я знаю, что есть псевдо-свойство с именем "class", по крайней мере, в HQL. Может быть, вы можете поэкспериментировать с этим.