Возможность фильтрации в коллекциях предусмотрена. Но это будет не один запрос (разве что, если только у вас fetch="EAGER", но лучше так не делать всегда).
Поэтому в вашем случае лучше взять
QueryBuilder. джойнить таблицы и фильтровать.
Хотя, опять же, если мне не изменяет память, если выбирается не всё содержимое, то коллекция не будет гидрироваться. Так можно будет выбрать либо одну сторону связи, либо другую. Либо можно выбрать без условий и фильтровать уже в коде. Но имеет смысл делать только если данных точно не будет слишком много.
Кстати, а почему вы так упорно хотите именно один запрос, а не два?