Вот полный пример из документов Hibernate :
16.4.Ассоциации
Путем навигации по ассоциациям с помощью createCriteria () вы можете указать ограничения для связанных сущностей:
List cats = sess.createCriteria(Cat.class)
.add( Restrictions.like("name", "F%") )
.createCriteria("kittens")
.add( Restrictions.like("name", "F%") )
.list();
Второй метод createCriteria () возвращает новый экземпляр Criteria, который ссылается нак элементам коллекции котят.
Итак, «котята» - это свойство типа коллекции для вашей сущности Cat, для которой создается вложенный критерий, который ограничивает котят только именами, начинающимися с F.
Я думаю, это означает, что вы получите только кошек с именем, начинающимся с F, по крайней мере с одним котенком, имя которого начинается с F.
List cats = session.createCriteria(Cat.class)
.createCriteria("kittens")
.add( Restrictions.like("name", "Iz%") )
.list();
В вашем примере, он возвращает всех кошек, у которых хотя бы один котенок назван, начиная сИз.
Я нахожу этот синтаксис немного запутанным, так как вложенность уплощена.Форматировщик исходного кода Java также уберет полезные отступы.
Разве имена столбцов не указаны с помощью ProjectionList?
Это не проекция.Вы все еще получаете все «столбцы».Это выбор (предложение WHERE в терминах SQL).