Поскольку у вас нет обратной связи, и поскольку критерии не позволяют выбрать другую сущность, а не корневую сущность, вам придется использовать подзапрос, но это уродливо:
DetachedCriteria subquery = DetachedCriteria.forClass(A.class, "a");
subquery.createAlias("a.b", "b2");
subquery.setProjection(Projections.property("b2.id"));
Criteria c = session.createCriteria(B.class, "b1");
c.add(Subqueries.propertyIn("b1.id", subquery));
Если бы у вас были обратные отношения OneToMany от B до A, вам просто нужно было бы сделать
Criteria c = session.createCriteria(B.class, "b1");
c.createAlias("b1.as", "a");
Кстати, эти не динамически построенные запросы лучше выражаются с помощью HQL, чем с API критериев. Если ваш реальный запрос - тот, который вы задали, просто используйте HQL: он более читабелен и мощнее.