Drools - 具有多个相同类型的导入对象的决策表

时间:2015-10-21 12:06:14

标签: java drools

我有一个包含多个相同类型导入的决策表:be.example.Person。一个人是罪犯,另一个人是法定监护人。

这是决策表的开头: enter image description here

决策表的编译是成功的,但是在运行时,它不会返回预期的结果。我为决策表插入事实的方式如下:

input id

似乎当我触发规则时,drools似乎插入对象2次为p:Person而不是:第一个是p:Person,第二个是q:Person。

或者换句话说,执行似乎是:

  1. 以罪犯身份执行rule1作为p:Person
  2. 使用legalGuardian执行rule1作为p:Person
  3. 执行带有罪犯的rule2作为p:Person
  4. 使用legalGuardian执行rule2作为p:Person
  5. 然而,我原本期望它表现得像:

    1. 以罪犯执行rule1为p:Person和legalGuardian为q:Person。
    2. 使用legalGuardian执行rule2作为p:Person和legalGuardian作为q:Person。
    3. drools不支持这种功能吗?在过去,我们使用类似的决策表,其中不同的对象类型似乎工作正常。但在这种情况下,如果对象的类型相同,那么就不会这样做。

      任何人都知道如果不可能,或者我是否以不正确的方式注入对象?

      正在使用的drools版本是5.5.0.Final。

1 个答案:

答案 0 :(得分:0)

对两个相当不同的实体使用同一个类并不是一个好的设计。好与坏有几个共同的属性:名称,年龄等。但已经被定罪的旗帜应仅限于违法者。

为获得最佳效果,请考虑继承Person:

class Offender extends Person {
    private boolean alreadyConvicted;
    //...
}
class Guardian extends Person {
}

根据您应该拥有的一些信息创建并插入它们。

决策表应该有p:Offenderq:Guardian

如果你在人群的海洋中捕鱼可能成对的罪犯和守护者,你必须通过使用咒语this != p和第二个人模式来确保p和q不同