Аналогично вопросу, найденному здесь: Использование предложения 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, которую я использую, делать это? Если нет, то какие у меня есть альтернативы?
Заранее спасибо,
Карл