无法积累正常工作

时间:2015-02-05 22:39:37

标签: drools

我有以下类结构(A类包含B类):

class A {
    B object;
    ...
}
只要B类特定字段的累积平均值高于给定值,我就会尝试做某事。

所以我试着写下以下内容:

when
   A($var1 : object)
   accumulate( B($num:num) from $var1;
               $avg1 : avg ($num); $avg1 < 10000)
then ...

会发生的是,不是在会话中累积所有实体并计算所有实体的平均值,而是分别在每个实体上计算平均值。 所以如果会话已经包含5个大于10000的数值并且插入了另一个,那么&#34;然后&#34;部分被调用6次(每个部分的平均值等于数值本身),而不是只调用一次。

你有什么暗示可以帮助我解决这个问题吗?

感谢。

1 个答案:

答案 0 :(得分:0)

您必须累计访问字段num的字段object的所有A个事实。

when
  accumulate( A( $var1: object );
              $avg1: avg($var1.getNum()); $avg1 < 10000)
then ...

将所有B对象作为事实插入也可以让你写出直截了当的

when
  accumulate( B( $num: num );
              $avg1: avg($num); $avg1 < 10000)
then ...