Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java tools & IDE's > Hibernate, setParameter(0, null)


Автор: Kraska 21.9.2007, 17:41
Добрый день! Подскажите, пожалуйста, как решить такую проблему:
кусок метода:
Код

Query q = session.getNamedQuery(SQL_SOME);
                q.setParameter(0, null);
                Rlist = q.list();


и запрос:
Код

<query name="abc"><![CDATA[
            select count(*)
            from Contact c 
            where c.age = ?
            ]]>
 </query>

проблема такова: этот запрос возвращает пустой список. Если же убрать   q.setParameter(0, null);
, а в запросе написать where c.age = null -- тогда список заполняется....
Почему не передается параметр? 
Заранее спасибо smile

Автор: Aoli 22.9.2007, 00:47
Ну кто же так на null проверяет? smile
(кроме Kraska)
Код

select count(*)
            from Contact c 
            where c.age is null

Соответственно, в хибернейте будет так же.

P.S. это, кстати, повезло, что запрос вообще выполняется smile

Автор: Kraska 24.9.2007, 10:03
Дело в том, что с IS null та же ерунда - значение параметра не передается....

Автор: Kraska 24.9.2007, 14:14
Товарисчи, не проходите мимо! Работа остановилась :((((

Автор: AlexeyVorotnikov 24.9.2007, 14:41
Цитата(Kraska @  24.9.2007,  11:03 Найти цитируемый пост)
Дело в том, что с IS null та же ерунда - значение параметра не передается....

Где вы в выражении "c.age is null" увидели значение параметра?

Автор: Kraska 24.9.2007, 15:08
Цитата(AlexeyVorotnikov @ 24.9.2007,  14:41)
Цитата(Kraska @  24.9.2007,  11:03 Найти цитируемый пост)
Дело в том, что с IS null та же ерунда - значение параметра не передается....

Где вы в выражении "c.age is null" увидели значение параметра?

Извините, "c.age is ?" 

Автор: AlexeyVorotnikov 24.9.2007, 15:14
Цитата(Kraska @ 24.9.2007,  16:08)
Цитата(AlexeyVorotnikov @ 24.9.2007,  14:41)
Цитата(Kraska @  24.9.2007,  11:03 Найти цитируемый пост)
Дело в том, что с IS null та же ерунда - значение параметра не передается....

Где вы в выражении "c.age is null" увидели значение параметра?

Извините, "c.age is ?"

Так нельзя, "is null" является неделимым выражением без параметров, и проверяет только на нулёвость. (есть ещё предикат "is not null", который проверяет на ненулёвость)
Также рекомендую прочитать какую-нибудь книжку по SQL. Хотябы краткий справочник.

Автор: Aoli 24.9.2007, 22:12
Чтобы работа не стояла:
Код

String SQL_PARAM_CONDITION = "select count(*) from Contact c where c.age = ?";
String SQL_NULL_CONDITION = "select count(*) from Contact c where c.age is null";
Query q;
if (param!=null) {
    q = session.getNamedQuery(SQL_PARAM_CONDITION);
    q.setParameter(0, param);
} else {
    q = session.getNamedQuery(SQL_NULL_CONDITION);
}
Rlist = q.list();

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)