Использование предложения IN в собственном SQL-запросе с Hibernate 3.2.2

Аналогично вопросу, найденному здесь: Использование предложения IN в собственном SQL-запрос; Я пытаюсь использовать предложение IN() с помощью собственного SQL-запроса в Hibernate. В то время как автор в другом вопросе смог использовать JPA, я - нет. К тому же я застрял на версии 3.2.2.

Похоже, что Hibernate изначально не поддерживает IN(), потому что он пытается преобразовать мой список (массив длинных примитивов) идентификаторов в двоичную форму при применении параметров запроса: query.setParameter("publisherGroups", [1243536264532,1243536264533,1243536264535]);

Из спящего режима:

SELECT sum(C2CReportedConversion) as c2CConversion, sum(C2CReportedRevenue) as c2CRevenue, sum(I2CReportedConversion) as i2CConversion, sum(I2CReportedRevenue) as i2CRevenue, sum(Clicks) as clicks, sum(Impressions) as impressions, sum(Requests) as requests, sum(Views) as views, coalesce(Name, DisplayName) FROM UiTemplateReportingCache JOIN AdUnit USING (AdUnitId) WHERE PublisherId = ? AND PublisherGroupId IN ( ? ) AND Date >= ? AND Date <= ? GROUP BY coalesce(Name, DisplayName)

Из логов mysql:

SELECT sum(C2CReportedConversion) as c2CConversion, sum(C2CReportedRevenue) as c2CRevenue, sum(I2CReportedConversion) as i2CConversion, sum(I2CReportedRevenue) as i2CRevenue, sum(Clicks) as clicks, sum(Impressions) as impressions, sum(Requests) as requests, sum(Views) as views, coalesce(Name, DisplayName) FROM UiTemplateReportingCache JOIN AdUnit USING (AdUnitId) WHERE PublisherId = 1239660230591 AND PublisherGroupId IN (_binary'��\0ur\0[Jx ��u�\0\0xp\0\0\0 \0\0!���T\0\0!���U\0\0!���W\0\0!���m\0\0!���n\0\0!���t\0\0!���{\0\0!���|\0\0!���}\0\0!���~\0\0#��\0\0$|��S') AND Date >= '2011-03-17 00:00:00' AND Date <= '2011-03-18 23:59:59' GROUP BY coalesce(Name, DisplayName)

Обратите внимание на часть _binary, которая начинает значение IN(). В чем хитрость, чтобы заставить это работать? Будет ли версия Hibernate, которую я использую, делать это? Если нет, то какие у меня есть альтернативы?

Заранее спасибо,

Карл


person carlsz    schedule 04.04.2011    source источник


Ответы (1)


Ответил на мой собственный вопрос и должен был иметь RTFM перед публикацией. «Хитрость» заключается в использовании query.setParameterList() вместо query.setParameter().

person carlsz    schedule 04.04.2011
comment
Спасибо, что разобрались с этим для меня :) - person Rake36; 24.11.2011
comment
1 для добавления решения - person Chad; 17.07.2015
comment
есть идеи, как использовать его с unnest()? - person wutzebaer; 12.04.2016