使用'或'与姐妹课时出现错误

时间:2016-08-30 15:02:28

标签: java drools

当我在编写规则并尝试'或'姐妹课时,我遇到了一个小问题。一些背景,这是一个小型模型来演示,这是在6.4。我有一个Parent class Fact,有两个女儿:ChildAFact和ChildBFact,我有这个规则:

rule "Rule 1"
when
    f:      ( ChildAFact() or ChildBFact() )
then
    System.out.println(f);
end

当我运行测试时,我收到此错误:

java.lang.RuntimeException: Error while creating KieBase[Message [id=1, level=ERROR, path=Sample.drl, line=12, column=0
   text=Duplicate declaration for variable 'f' in the rule 'Rule 1'], Message [id=2, level=ERROR, path=Sample.drl, line=10, column=0
   text=Unable to Analyse Expression System.out.println(f);:
[Error: unable to resolve method using strict-mode: org.drools.core.spi.KnowledgeHelper.f()]
[Near : {... System.out.println(f); ....}]
                                ^
[Line: 10, Column: 0]]]
    at org.drools.compiler.kie.builder.impl.KieContainerImpl.getKieBase(KieContainerImpl.java:450)
    at org.drools.compiler.kie.builder.impl.KieContainerImpl.newKieSession(KieContainerImpl.java:604)
    at org.drools.compiler.kie.builder.impl.KieContainerImpl.newKieSession(KieContainerImpl.java:575)
    at com.sample.DroolsTest.main(DroolsTest.java:20)

我希望有人知道解决这个问题的方法。我希望与条件匹配的对象将被投射到最近的“ored”对象的共同祖先

1 个答案:

答案 0 :(得分:1)

将一个变量绑定到两种不同类型是不可能的。但是你可能已经过了

rule "a or b"
when
    f: Fact( class == ChildAFact.class || == ChildBFact.class )
then
    System.out.println(f);
end

这些规则的用处受到限制。通常,您应该编写单独的规则,每个事实类型一个。您可以使用“extend”来分解公共部分,这样您就不必重复所有约束。