14

ここにある質問と同様の方法で:ネイティブ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のバージョンもこれを実行しますか?そうでない場合、どのような選択肢がありますか?

前もって感謝します、

カール

4

1 に答える 1

39

私自身の質問に答えたので、投稿する前にRTFMを実行する必要があります。「トリック」は、ではなく使用するquery.setParameterList()ことquery.setParameter()です。

于 2011-04-04T21:28:27.977 に答える