ComparisonPredicate render NullPointException

讲SQL改为CriteriaBuilder的方式查询,报了个错误

java.lang.NullPointerException
    at org.hibernate.jpa.criteria.predicate.ComparisonPredicate.render(ComparisonPredicate.java:187)

检查了所有查询条件,没有类属性书写错误,那为什么还会发生绑定错误呢?

将断点设置在第一个报错的位置,进行调试,该断代码是:

public String render(boolean isNegated, RenderingContext renderingContext) {
        return ((Renderable)this.getLeftHandOperand()).render(renderingContext) + this.getComparisonOperator(isNegated).rendered() + ((Renderable)this.getRightHandOperand()).render(renderingContext);
    }

当断点在此方法中,查看表达式的值,此表达式由三部分组成,第一部分是目标字段,第二部分为连接符”<>”,第三部分为条件值,分别查看值,发现第三部分报了NullPointException

((Renderable)this.getRightHandOperand()).render(renderingContext)

那只好去检查自己的表达式中有关这个字段的部分了。

我的代码中有关这个字段的表达式是这样的。

predicates.add(cb.or(cb.equal(cl_createUser, userId),cb.equal(cl_createUser, null)));

这个表达式是个or语句,那我就试着用一个条件先查

predicates.add(cb.equal(cl_createUser, userId))

单独用这部分的时候是正常的,加上后面一部分就出了错误,这什么道理?

原来Predicate的equal方法是不允许和null比较的,这个文档上没有说明equal的Exception,但人家提供了isNullisNotNull方法。

改成这样就OK了

predicates.add(cb.or(cb.equal(cl_createUser, userId),cb.isNull(cl_createUser)));

实际上SQL也没有xx=null的写法,基本都是xx is null。
这样看来还是自己的SQL问题,捂脸。。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值