Запрос относительно вашего вопроса будет выглядеть так:
SELECT c1.name, c1.id
FROM c c1
JOIN b b1 on c1.b_id = b1.id
JOIN a a1 on b1.a_id = a1.id
WHERE a1.name = 'ABC'
все записи класса A, где C.someField равен параметру, переданному как 'ABC'
Решение:
Criteria c_criteria = getCurrentSession().createCriteria(C.class,"c1");
Criteria b_criteria = c_criteria.createCriteria("b","b1");
Criteria a_criteria = b_criteria.createCriteria("c","c1");
a_criteria.add(Restrictions.eq("name", "ABC"));
ProjectionList properties = Projections.projectionList();
properties.add(Projections.property("someField"));
properties.add(Projections.property("id"));
c_criteria.setProjection(properties);
c_criteria.list();