Я передал список с более чем 1000 элементами в запросе HQL и пропустил эту ошибку.
maximum number of expressions in a list is 1000
Я прочитал несколько сообщений в Stackoverflow, в которых предлагается разбить список на несколько подписок .
Query query = session.createQuery(
"SELECT r.subject, COUNT(DISTINCT ss.id), COUNT(DISTINCT r.uid)\n" +
"FROM " + R.class.getName() + " r\n" +
"," + SS.class.getName() + " ss\n" +
"WHERE r.id = ss.id\n" +
"AND r.uid in (:listMoreThan1000)\n" +
"GROUP BY r.subject\n"
);
query.setParameterList("listMoreThan1000", listMoreThan1000);
List<Object[]> rows = query.list();
// code to parse the rows
Я новичок в запросе HQL, и может ли кто-нибудь сказать мне, как разделить listMoreThan1000
на несколько подписок в моем коде?
Ошибка ясна, просто разделите свой огромный список на небольшой список, чем передайте их в свой запрос, если вы используете Java 8+, вы можете использовать этот метод. Разделите список на списки n размера в Java 8 на Szymon Stepniak ,
Тогда ваш сервис может выглядеть следующим образом:
Ваш запрос в конце должен выглядеть например:
Обратите внимание на эту часть:
Это проверит, существует ли ваш uid в первом подсписке или в 2ed sublist ... до n sublist
попробуйте использовать кортежи или, если возможно, дополнительный запрос.