В JPQL вы можете использовать функцию SIZE для получения размера ElementCollection.
Я не совсем понимаю, как именно вы хотите запрашивать ваши данные, поэтому я приведу вам два разных примера возможного использования в вашей примерной структуре сущностей.
Получите N самых популярных сообщений
Чтобы получить N самых популярных постов, нам нужно
- Сортируйте наши сообщения по размеру голосов за коллекцию.
- Ограничить по N.
Просто так:
select p from Post p order by SIZE(p.votesFor) desc limit :n
где : n - некоторый параметр в вашем запросе
Получать сообщения не менее чем с N голосами за
Второй возможный способ - запрашивать сообщения, по крайней мере, с некоторым количеством голосов «За». Для этого вам нужно будет использовать выражение WHERE, вот так:
select p from Post p where SIZE(p.votesFor) >= :n
где: n - количество минимальных голосов, которые вы ищете.
Подробнее о специальных операторах, таких как SIZE ЗДЕСЬ