Оператор JPA 2 допускает пустое значение в запросе конструктора - PullRequest
1 голос
/ 08 ноября 2011

У меня есть запрос критериев конструктора.Для конструктора я пытаюсь сделать что-то вроде этого:

query.select( builder.construct( MyView.class
    , metaObject
    , builder.selectCase( builder.isNull( metaOtherObject )).when( true, null ).otherwise( metaOtherObject.get( MetaOtherObject_.myDateField ))
));

Если я использую when(true,null), я получаю исключение NullPointerException в этой строке.Если я использую что-то вроде when(true,new Date()), то все выглядит хорошо.Проблема в том, что я должен иметь возможность пропустить нулевое значение, если OtherObject не был найден.Как я могу это сделать?

Я использую eclipselink в качестве поставщика, работающего с postgres.

Ответы [ 2 ]

0 голосов
/ 08 ноября 2011

Похоже, мне нужно использовать буквальный метод CriteriaBuilder или nullLiteral.Что-то вроде

Expression nil = builder.literal(null);
// or
Expression<Date> nilDate = builder.nullLiteral(Date.class);
// then I can 
blah.when(true, nilDate).otherwise(blah)

Хотя мой запрос все еще не выполнен, он не находится в той части конструктора, где я пытался использовать только null напрямую.Я считаю, что другие проблемы не связаны с этим.

0 голосов
/ 08 ноября 2011

Включите трассировку стека и версию, которую вы используете.

Обратите внимание, что когда () есть два метода, один из которых принимает Object, а другой - Expression, убедитесь, что вы каким-то образом не вызываете тот, который принимает Expression.

...