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

Drools运行规则报handle not found for object错误求助

报错原因分析

该报错与对同一属性同时进行匹配和更新的操作无关,核心原因为:仅Premium对象被插入到Drools工作内存中,待修改的InsuranceType对象仅作为Premium的集合属性元素存在,本身未被直接纳入工作内存管理,因此Drools执行modify操作时无法定位到该对象的句柄,抛出异常。

解决方案

可根据业务场景选择以下两种适配方案:

方案1:更新父对象Premium的工作内存状态(改动最小)

无需修改规则匹配逻辑,仅调整后果部分操作:先完成InsuranceType的属性修改,再通知Drools父对象Premium的属性发生变更即可,修改后的规则如下:

rule "Example"
when
  $pcr:Premium( $insuranceTypes: insuranceTypes )
  $ins: InsuranceType( name == "TPD" , category == "D" ) from $insuranceTypes      
then
  $ins.setCategory("A"); 
  update($pcr);
end

该方案适用于没有其他规则需要直接匹配独立InsuranceType对象的场景,不会出现死循环:属性更新后category已变为A,不会再命中当前规则的匹配条件。若有特殊逻辑需求,也可给规则添加no-loop true属性进一步避免重复触发。

方案2:将InsuranceType对象直接插入工作内存

在初始化插入业务数据阶段,除插入Premium对象外,额外遍历insuranceTypes集合,将每个InsuranceType实例都插入到Drools工作内存中,原有规则代码无需修改即可正常运行。
该方案适用于存在大量规则需要直接匹配、操作独立InsuranceType对象的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 07:15:08