По сути, я хочу получить все записи, соответствующие одному из идентификаторов, упомянутых в IN. .
Я пробовал использовать и HQL, и критерии, но получил тот же результат.
Мой запрос HQL:
Код: Выделить всё
Set reportIds = new HashSet();
reportIds.add("1");
reportIds.add("2");
String whereClause = "from Report where id IN (:reportIds) ";
Query query = session.createQuery(whereClause);
query.setParameterList("reportIds", reportIds);
Включил логирование и вот что вижу:
Спящий режим:
Код: Выделить всё
/*
from
Report
where
id IN (
:ids
) */ select
mediavalue0_.id as id31_,
...
from
report mediavalue0_
where
mediavalue0_.id in (
?
)
Код: Выделить всё
HibernateLog --> 13:22:36 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - 1,2
Я возился с этим, поэтому по прихоти решил создать напрямую экземпляр Set внутри setParameterList() вызов метода сам по себе. Вот так,
Код: Выделить всё
query.setParameterList("reportIds", Sets.newHashSet("1","2"));
Этот запрос преобразуется в следующий TRACE:
Код: Выделить всё
from
Report
where
id IN (
:ids
) */ select
mediavalue0_.id as id31_,
...
from
report mediavalue0_
where
mediavalue0_.id in (
? , ?
)
Код: Выделить всё
HibernateLog --> 13:28:57 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - 1
HibernateLog --> 13:28:57 TRACE org.hibernate.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - 2
Я совершенно сбит с толку этим странным поведением. Возможно, некоторые из вас, ребята, смогут указать, что я делаю неправильно.
К вашему сведению, конструкция критериев, которую я использовал (и которая привела к тому же результату), выглядит следующим образом:
Код: Выделить всё
Criteria criteria = session.createCriteria(Report.class);
criteria.add(Restrictions.in("id", reportIds));
Код: Выделить всё
SELECT mvr.* from report mvr
WHERE mvr.id IN :ids
Я обнаружил проблему. Как-то неловко. Код на стороне клиента отправлял элемент Set из 1, который представлял собой объединенную строку идентификаторов отчетов. Ааа!
Подробнее здесь: https://stackoverflow.com/questions/143 ... terlist-in