我在流口水中使用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注释;它按我的期望工作。它没有重新激活“逻辑插入”规则,也没有进入循环。