Это может не работать с использованием критериев. Скорее всего, это потому, что набор не может быть получен тем же SQL-запросом, который сгенерирован критериями.
Я бы действительно подумал, чтобы получить весь объект. Это намного проще, и если это не очень особый случай, это не стоит хлопот. (Кстати, это может быть быстрее для извлечения целых объектов, возможно, они уже находятся в кэше.) Обычно учитывается количество запросов (и их сложность, конечно), а не количество извлеченных столбцов.
Вероятно, он работает с HQL, там есть функция elements
. В любом случае рассмотрите возможность использования HQL для статических запросов, он более мощный.
select
ws.Title,
elements(ws.PartTitles),
w.id
from
Work w
inner join w.WorkSet ws
where w.id in (:ids)
elements
разрешено в предложении select, но я не знаю, что вы получите. Скорее всего, в результате вы получите столько записей, сколько будет PartTitles, потому что построен только один оператор SQL.