我在流口水中使用insertLogical()。

这是规则:

rule "logical insert"
salience 100
    when
        $p : Person( $number : number > 1, $name : name == "AB" || name == "AC" )
        not ( exists( PersonConfig( person == $p )))
    then
        System.out.println("Inserted PC");
        insertLogical(new PersonConfig(16,$name,$p));
end

rule "Check Inserted"
salience 90
    when
        $pc : PersonConfig(  )
    then
        System.out.println("Inserted PC Object: "+$pc);
end

rule "Retract Person Config Rule When Clause"
salience 80
    when
        $p : Person( number > 1, name == "AB" || name == "AC"  )
    then
        System.out.println("Retracting : "+$p);
        //$p.setName("BD");
        //retract($p);
        update($p);
end

rule "Checking Person Config Exist"
salience 70
    when
        not ( exists( PersonConfig(  ) ))
    then
        System.out.println("PC not Exists");
end


我在下面尝试做的是:


我选择所有插入的人员类对象,并在此基础上尝试基于某些条件插入逻辑(PersonConfig())对象。
现在,在这两者之间,我正在对Person类对象进行一些更新,但完成insertLogical的条件保持不变。这会导致触发规则“逻辑插入”。然后我试图通过设置以下条件来施加约束以阻止这种射击

不(存在(PersonConfig(person == $ p)))


即,如果没有具有相同个人引用的属性的PersonConfig对象。但它不起作用。

请检查并提供一些解决方案。

谢谢

最佳答案

通过@PropertyReactive注释;它按我的期望工作。它没有重新激活“逻辑插入”规则,也没有进入循环。

09-30 23:58