ここにある質問と同様の方法で:ネイティブSQLクエリでIN句を使用します。IN()
HibernateのネイティブSQLクエリを使用して句を利用しようとしています。他の質問の作成者はJPAを使用できましたが、私は使用できません。さらに、私はバージョン3.2.2で立ち往生しています。
IN()
クエリパラメータを適用するときにIDのリスト(長いプリミティブの配列)をバイナリ形式に変換しようとしているため、Hibernateはネイティブにサポートしていないようです。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のバージョンもこれを実行しますか?そうでない場合、どのような選択肢がありますか?
前もって感謝します、
カール