кстати, это дизайн. Вы не можете отфильтровать коллекцию, используя ограничение.
Если присмотреться, hibernate отправляется в БД дважды: один раз с вашим запросом и один раз, чтобы получить коллекцию.
вам нужно сначала получить объект cat, а затем получить отфильтрованных котят, которые будут по умолчанию загружены.
что-то вроде
var kittens= cat.kittens.where(x->x.color="yellow")
var count=kittens.Count();
если ява вы могли бы сделать что-то вроде этого
Collection<Kitten> kittens= cat.getKittens();
Collection<Kitten> filteredKittens = filterCollection(kittens, session);
и ваш метод filterCollection будет:
private static <T> Collection<T> filterCollection(Collection<T> collection, Session s) {
Query filterQuery = s.createFilter(collection, "where this.color='yellow'");
return filterQuery.list();
}
вот блог пост об этом: http://www.flexpasta.com/index.php/2009/05/20/filtering-hibernate-child-collections/
на основе комментариев ниже мы решили использовать
select g, k from grandCat g inner join fetch g.cat c inner join fetch c.kitten k where k.color ='yellow'
и выберите необходимый контент, а затем приведите его соответствующим образом. Прочитайте комментарии для ясности