Java Drools:在无状态会话中执行两次的简单规则

Java Drools:在无状态会话中执行两次的简单规则,java,drools,Java,Drools,我创建了一个简单的Drools项目。 一切正常,除了我的规则执行了两次,而不是一次 请检查我的规则: package rules rule "age and type match" when $droolsIntro : rules.DroolsInstruction( type == "Manager" ) && rules.DroolsInstruction( age >= 20 ) then

我创建了一个简单的Drools项目。 一切正常,除了我的规则执行了两次,而不是一次

请检查我的规则:

package rules

rule "age and type match"
   when
       $droolsIntro : rules.DroolsInstruction( type == "Manager" ) && rules.DroolsInstruction( age >= 20 )
   then
       System.out.println("age and type match");
       System.out.println($droolsIntro.introduceYourself());
   end
请检查代码:

List<DroolsInstruction> facts = new ArrayList<DroolsInstruction>();
DroolsInstruction object3 = new DroolsInstruction("Manager", 25);
DroolsInstruction object4 = new DroolsInstruction("Policeman", 31);
facts.add(object3);
facts.add(object4);
DroolsDynamicJar drools = new DroolsDynamicJar();
StatelessKieSession kSession = drools.getStatelessSessionWithJar();
kSession.execute(facts);
List facts=new ArrayList();
DroolInstruction object3=新的DroolInstruction(“Manager”,25);
DroolInstruction object4=新的DroolInstruction(“警察”,31);
添加(反对意见3);
添加(反对意见4);
DroolsDynamicJar drools=新DroolsDynamicJar();
无状态会话kSession=drools.getStatelessSessionWithJar();
执行(事实);
这里是输出,它显示规则对同一对象执行了两次:

年龄和类型匹配 经理,25岁,假

年龄和类型匹配 经理,25岁,假

为什么?

这种模式

DroolsInstruction( type == "Manager" )
DroolsInstruction( age >= 20 )
匹配实体“Manager”和年龄>=20的实体,但不对其关系进行任何约束。因此,一个25岁的经理符合第一种模式和第二种模式:火!但是同一个经理匹配第一种模式,一个老警察匹配第二种模式:再次开火

如果你想寻找老经理,你最好写

DroolsInstruction( type == "Manager", age >= 20 )
尽管环境因素(不推荐)

也会起作用。

这种模式

DroolsInstruction( type == "Manager" )
DroolsInstruction( age >= 20 )
匹配实体“Manager”和年龄>=20的实体,但不对其关系进行任何约束。因此,一个25岁的经理符合第一种模式和第二种模式:火!但是同一个经理匹配第一种模式,一个老警察匹配第二种模式:再次开火

如果你想寻找老经理,你最好写

DroolsInstruction( type == "Manager", age >= 20 )
尽管环境因素(不推荐)


这也行。

明白了!谢谢你的解释,劳恩,这对我来说并不容易得到这个:)得到了!谢谢你的解释,劳恩,这对我来说并不容易:)