#java #jpa #jpa-2.0 #criteria
#java #jpa #jpa-2.0 #критерии
Вопрос:
У меня есть запрос критериев конструктора. Для конструктора я пытаюсь сделать что-то вроде этого:
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())
, то это выглядит нормально. Проблема в том, что мне нужно иметь возможность передавать null туда, если OtherObject не был найден. Как я могу это сделать?
Я использую eclipselink в качестве поставщика, использующего postgres.
Ответ №1:
Укажите трассировку стека и версию, которую вы используете.
Обратите внимание, что когда () имеет два метода, один, который принимает Object, и другой, который принимает Expression, убедитесь, что вы каким-то образом не вызываете тот, который принимает Expression.
Ответ №2:
Похоже, мне нужно использовать литеральные методы 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
напрямую. Я считаю, что другие проблемы не связаны с этим.