Спящий режим: найдите только те строки, которые не имеют отношения "многие ко многим"

51
6

ОК, я сопоставил аннотации двух таблиц с двунаправленным отношением @ManyToMany.


Теперь я хочу вернуть только те элементы, которые не входят во многие отношения, и я пытаюсь использовать код здесь, но он генерирует исключение во время выполнения.
Здесь HQL:


String hql = "select a from Article a " +
"left join a.tags t " +
"group by a " +
"having count(t)=0";

Есть ли лучший способ вернуть эти элементы? Или исправить ошибку в этом запросе?


Исключением, которое он выбрал, является:


column "article0_.id" must appear in the GROUP BY clause or be used in an aggregate function

org.springframework.dao.InvalidDataAccessResourceUsageException: could not execute query; SQL ...

спросил(а) 2011-04-07T09:38:00+04:00 8 лет, 11 месяцев назад
1
Решение
62

Запрос верный, но в некоторых базах данных group by a недостаточно, вы должны перечислить все свойства a, например group by a.id, a.title.


В качестве альтернативы вы можете использовать следующий запрос:


select a from Article a where a.tags is empty

См. также:


ответил(а) 2011-04-07T11:23:00+04:00 8 лет, 11 месяцев назад
51

Не уверен, что это сработает, но вы можете попробовать:

String hql = "select a from Article a " +
"where a.tags=null ";

ответил(а) 2011-04-07T11:15:00+04:00 8 лет, 11 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема