在 Hibernate 3.2.2 的本机 sql 查询中使用 IN 子句
Posted
技术标签:
【中文标题】在 Hibernate 3.2.2 的本机 sql 查询中使用 IN 子句【英文标题】:Using IN clause in a native sql query with Hibernate 3.2.2 【发布时间】:2011-07-29 10:56:37 【问题描述】:以类似于此处发现的问题的方式:Using IN clause in a native sql query;我试图通过 Hibernate 中的本机 SQL 查询来使用 IN()
子句。虽然另一个问题的作者能够使用 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 版本会这样做吗?如果没有,我有什么选择?
提前致谢,
卡尔
【问题讨论】:
【参考方案1】:回答了我自己的问题,并且在发布之前应该有 RTFM'd。 “技巧”是使用query.setParameterList()
而不是query.setParameter()
。
【讨论】:
感谢您帮我解决这个问题 :) 1 用于添加解决方案 任何想法如何将它与 unnest() 一起使用?以上是关于在 Hibernate 3.2.2 的本机 sql 查询中使用 IN 子句的主要内容,如果未能解决你的问题,请参考以下文章
使用本机 SQL 创建表适用于 Hibernate/HSQLDB,插入失败。为啥?
如何使用本机 SQL 在 Hibernate 中获取仅包含选定列的表实体列表?