Как правильно написать этот запрос JPA? Я просто догадываюсь, как я не могу понять это или найти это в своей книге JPA.
Query query=em.createQuery("select m from Meeting m where count(m.attendees) = 0");
return query.getResultList();
В настоящее время я пробую это с Hibernate, и я получаю ошибку mysql!
ERROR org.hibernate.util.JDBCExceptionReporter - You have an error in your
SQL syntax; check the manual that corresponds to your MySQL server version
for the right syntax to use near ')=0' at line 1
Чтобы точно ответить на заголовок вопроса, используйте 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 (простое_арифметическое_выражение) | КОРЕНЬ (простое_арифметическое_выражение) | MOD (простое_арифметическое_выражение, простое_арифметическое_выражение) | РАЗМЕР (выражение_значного_путь_собрания)
Функция ABS принимает числовой аргумент и возвращает число (целое, с плавающей запятой или двойное) того же типа, что и аргумент функция.
Функция КОРЕНЬ принимает числовой аргумент и возвращает двойное значение.
Функция MOD принимает два целых числа аргументы и возвращает целое число.
Функция РАЗМЕР возвращает целое число. значение, количество элементов коллекция. Если коллекция пусто, функция РАЗМЕР оценивается как нуль.
Числовые аргументы этих функций может соответствовать числовому Java типы объектов, а также примитивные числовые типы.
В частном случае 0
вы также можете использовать IS EMPTY
4.6.11 Выражения сравнения пустой коллекции
Синтаксис для использования оператор сравнения
ПУСТО
в empty_collection_comparison_expression выглядит следующим образом:выражение_значение_путь_собрания ЕСТЬ [НЕ] ПУСТО
Это выражение проверяет, действительно ли коллекция, обозначенная возвращающее коллекцию выражение пути пустой (т.е. не имеет элементов).
Пример:
ВЫБРАТЬ o ОТ Заказать o ГДЕ о.lineItems ПУСТО
Если стоимость коллекционного выражение пути в пустой коллекции выражение сравнения неизвестно, значение пустого сравнения выражение неизвестно.
Я бы проверил оба, чтобы увидеть, какой из них наиболее эффективен (проверьте план запроса).