2011-04-04 24 views
10

De forma similar a la pregunta que se encuentra aquí: Using IN clause in a native sql query; Estoy intentando hacer uso de una cláusula IN() a través de una consulta SQL nativa en Hibernate. Si bien el autor en la otra pregunta fue capaz de usar JPA, no lo soy. Además, estoy atascado con la versión 3.2.2.Uso de la cláusula IN en una consulta sql nativa con Hibernate 3.2.2

Parece que Hibernate no soporta de forma nativa IN() porque está intentando convertir mi lista (array de primitivos largos) de ID en forma binaria en la aplicación de los parámetros de consulta: query.setParameter("publisherGroups", [1243536264532,1243536264533,1243536264535]);

De 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)

A partir de los registros de 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)

Observe la pieza _binary que inicia el valor IN(). ¿Cuál es el truco para hacer que esto funcione? ¿Hará esto la versión de Hibernate que estoy usando? Si no, ¿qué alternativas tengo?

Gracias de antemano,

Carl

Respuesta

30

respondido a mi propia pregunta y deben tener RTFM'd antes de la publicación. El "truco" es usar query.setParameterList() en comparación con query.setParameter().

+0

Gracias por resolver esto :) – Rake36

+0

+1 por agregar la solución. – kriver

+0

1 para agregar la solución – Chad

Cuestiones relacionadas