14

以类似于此处发现的问题的方式:在本机 sql 查询中使用 IN 子句;我试图IN()通过 Hibernate 中的本机 SQL 查询来使用子句。虽然另一个问题的作者能够使用 JPA,但我不能。此外,我坚持使用 3.2.2 版本。

似乎 Hibernate 本身不支持IN(),因为它在应用查询参数时试图将我的 ID 列表(长基元数组)转换为二进制形式: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 版本会这样做吗?如果没有,我有什么选择?

提前致谢,

卡尔

4

1 回答 1

39

回答了我自己的问题,并且在发布之前应该有 RTFM。“技巧”是使用query.setParameterList()而不是query.setParameter().

于 2011-04-04T21:28:27.977 回答