Чтобы строго ответить на заголовок вопроса, используйте SIZE
:
Query query=em.createQuery("select m from Meeting m where size(m.attendees) = 0");
return query.getResultList();
Из спецификации JPA:
4.6.16.2 Арифметические функции
functions_returning_numerics::=
ABS(simple_arithmetic_expression) |
SQRT(simple_arithmetic_expression) |
MOD(simple_arithmetic_expression, simple_arithmetic_expression) |
SIZE(collection_valued_path_expression)
Функция ABS принимает числовой
аргумент и возвращает число
(целое число, число с плавающей запятой или двойное число)
тот же тип, что и аргумент
функция.
Функция SQRT принимает числовой
аргумент и возвращает двойной.
Функция MOD принимает два целых числа
аргументы и возвращает целое число.
Функция SIZE возвращает целое число
значение, количество элементов
коллекция. Если коллекция
пусто, функция SIZE оценивает
ноль.
Числовые аргументы этих функций
может соответствовать числовой Java
типы объектов, а также примитив
числовые типы.
В частном случае 0
вы также можете использовать IS EMPTY
4.6.11 Выражения сравнения пустой коллекции
Синтаксис использования
оператор сравнения IS EMPTY
в
empty_collection_comparison_expression
выглядит следующим образом:
collection_valued_path_expression IS [NOT] EMPTY
Это выражение проверяет, действительно ли
коллекция, обозначенная
коллекционное значение пути
пусто (т. е. не имеет элементов).
Пример:
SELECT o
FROM Order o
WHERE o.lineItems IS EMPTY
Если значение коллекционного значения
выражение пути в пустой коллекции
выражение сравнения неизвестно,
значение пустого сравнения
выражение неизвестно.
Я бы протестировал оба, чтобы определить, какой из них наиболее эффективен (проверьте план запроса).