JPA 2 case语句在构造函数查询中允许null

时间:2011-11-08 06:02:24

标签: java jpa jpa-2.0 criteria

我有一个构造函数条件查询。对于构造函数,我试图做这样的事情:

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,我需要能够在那里传递null。我怎么能这样做?

我正在使用eclipselink作为提供商点击postgres。

2 个答案:

答案 0 :(得分:0)

包括您正在使用的堆栈跟踪和版本。

注意,当()有两个方法时,一个接受Object,另一个接受Expression,确保你不会以某种方式调用带有Expression的方法。

答案 1 :(得分:0)

看起来我需要使用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的构造函数部分中。我认为其他问题与此无关。