Поскольку вопрос старый, и в этом направлении сделано много улучшений.Следующее поможет кому-то, ищущему, как я. Следование работает даже со сложными блоками и {} и или {} внутри запроса критериев с коллекциями.напримерспециальностей это коллекция.
List users = User.createCriteria().list(){
createAlias('specialities', 'sp', CriteriaSpecification.LEFT_JOIN)
ilike("sp.name","%"+trimPhrase+"%")
}