По аналогии с вопросом, найденным здесь: Использование предложения IN в собственном SQL-запросе ;Я пытаюсь использовать предложение IN()
посредством собственного запроса SQL в Hibernate.Хотя автор в другом вопросе смог использовать JPA, я нет.Кроме того, я застрял с версией 3.2.2.
Кажется, что Hibernate изначально не поддерживает IN()
, потому что пытается преобразовать мой список (массив длинных примитивов) идентификаторов в двоичную форму при применении параметров запроса: query.setParameter("publisherGroups", [1243536264532,1243536264533,1243536264535]);
Из Hibernate:
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, которую я использую, даже делать это?Если нет, какие у меня есть альтернативы?
Заранее спасибо,
Карл