You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Drools中校验原始类型及插入Long值到kieSession的正确方法

问题原因分析
  • 首先,Drools的工作内存(Working Memory)不会将null作为Fact对象存储,你插入null到kieSession时会被直接忽略,规则中匹配值为null的Long类型Fact永远无法命中。
  • 其次,你当前的规则是匹配工作内存中根级别为Long类型的Fact,如果你实际插入的是包含id字段的业务对象,而非直接插入Long类型值,该规则也不会触发。
  • 最后,Drools原生支持空值判断运算符,不需要额外调用Objects.isNull静态方法,额外的方法调用还会降低规则匹配性能。
解决思路

分不同使用场景选择对应方案:

场景1:判断工作内存中不存在Long类型Fact

如果你的需求是校验工作内存中没有存入任何Long类型的id值,规则写法如下:

when
    not Long()
then
    // 后续逻辑,比如插入默认id
    insert(10001L);
end

not Long()的语义就是工作内存中不存在任何Long类型Fact,包含你插入null被忽略的场景。

场景2:校验业务对象中的Long类型id字段为null

如果你插入的是包含id字段的业务对象(比如User类,包含Long id属性),规则写法如下:

when
    $user: User(id == null)
then
    // 后续逻辑,比如给user设置id,再插入Long类型值到session
    $user.setId(10002L);
    insert($user.getId());
end

场景3:校验已插入的Long类型值的范围

如果你已经确定插入的是不为null的Long类型值,需要校验值的合理性,直接用Drools原生运算符判断即可:

when
    $id: Long(this <= 0)
then
    // 处理非法id的逻辑
end

内容的提问来源于stack exchange,提问作者Narges

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 02:54:03