HQL noob здесь, действительно борется с этим.Выбор коллекций в HQL
Допустим, у меня есть следующие три класса:
public class A {
int id;
B b;
}
public class B {
int id;
Set<C> c;
}
public class C {
int id;
String type;
}
Таблица B имеет отношения многие ко многим с C, определяемой таблицей b_c. Мне нужен запрос, который выбирает из таблицы A, группы по C.id, фильтрует по C.type = 'wishType' и возвращает объект C и счетчик A.id. Я играл вокруг с чем-то вроде:
SELECT c, COUNT(a.id) as count from A a JOIN a.b.c as c WHERE c.type = 'desiredType' GROUP BY c.id ORDER BY COUNT(a.id) desc
Я играл с различными итерациями этого запроса, но я получаю различные исключения или мой запрос не вернет ничего. Основная проблема, по-видимому, не в том, чтобы понять, как вернуть отдельные объекты коллекции, соответствующие правильному типу.
Надеюсь, этот вопрос не звучит глупо. Я прочитал руководства по HQL и сотни других вопросов SO, но я должен что-то упустить. Заранее благодарю за любое руководство.
Не прямой ответ на ваш вопрос, но проблема в том, что вам лучше выполнять более строгие правила и вместо того, чтобы использовать «тип» в вашем объекте «C», вы должны добавить подтипы класса, используя тип столбца ваша база данных как дискриминант. Тогда было бы проще запросить только C правильного типа. С другой стороны, я терплю вас от боли, требуя отфильтрованной коллекции спящего режима. – benzonico