Drools:如何在检查事实是否尚未存在于工作记忆中后插入事实

Arv*_*ind 5 java drools

我正在使用 drools 来验证一个对象。该对象还有一个 getChildrenList() 方法,该方法返回与该对象相关的子对象(主从关系)。

我对对象进行了一些验证,然后我也想验证子对象,因此我使用以下规则将所有子对象插入到工作内存中:

 rule "Insert Children"
     when
             $parent : Parent ( eval(childrenList != empty) )
                     $ch : Child() from $p.childrenList
     then
             insert($ch);
     end
Run Code Online (Sandbox Code Playgroud)

现在,如果已经插入了子项,我如何确保该规则不会被解雇。我的意思是因为我修改了一些事实,所以规则被重新触发。我怎样才能防止这种情况发生?

谢谢

Pet*_*ton 3

您可以尝试将此行添加到when条件中,尽管我怀疑这不是“正确”的习惯用法:

not( Child(this == $ch) )
Run Code Online (Sandbox Code Playgroud)