спящий вложенный параметр выбора - PullRequest
0 голосов
/ 05 января 2012

У меня есть запрос гибернации с вложенным выбором:

((EntityManager)Component.getInstance("entityManager")).createQuery("SELECT e FROM someEntity e " +
                "WHERE e.field1 = ?1 AND e.field2 IS NOT NULL AND " +
                "e.field3 IN " +
                "(SELECT t.field3 from otherEntity t " +
                "WHERE t.id.field4 = ?2 " +
                "AND t.field5 > 0 " +
                "AND t.field6 != 'SUBMITTED')")
                .setParameter(1, processor.ONE_PARAM)
                .setParameter(2, processor.OTHER_PARAM)
                                .getResultList();

Если я запускаю этот запрос как есть, я не получаю никаких ошибок или предупреждений и никаких результатов (возвращает ноль).Если я изменю запрос, заменив 2-й параметр жестко закодированным значением, я получу ожидаемые результаты:

((EntityManager)Component.getInstance("entityManager")).createQuery("SELECT e FROM someEntity e " +
                "WHERE e.field1 = ?1 AND e.field2 IS NOT NULL AND " +
                "e.field3 IN " +
                "(SELECT t.field3 from otherEntity t " +
                "WHERE t.id.field4 = hardcoded_other_param " +
                "AND t.field5 > 0 " +
                "AND t.field6 != 'SUBMITTED')")
                .setParameter(1, processor.ONE_PARAM)
                                .getResultList();

Внешний и вложенный запрос работают в Oracle отдельно и вместе корректно.Параметры не работают во вложенных выборках Hibernate или я что-то упустил?

Я использую Hibernate 3.31 с JSF 1.2 и Seam 2.

1 Ответ

0 голосов
/ 05 января 2012

Можете ли вы запустить отладчик и проверить, как выглядит строка запроса в каждом случае?Я думаю, вы можете пропустить пробел или другого персонажа, который, как вы думаете, вы в том числе.Я не думаю, что вложенный выбор будет проблемой.

...