2009-08-05 2 views
4

Я использую drools для проверки объекта. Объект также имеет метод getChildrenList(), который возвращает дочерние объекты, связанные с этим объектом (отношение master-detail).Drools: как вставить факт после проверки, если он еще не присутствует в рабочей памяти

я сделать некоторые валидации на объекте, а затем я хочу, чтобы проверить дочерние объекты, а также, так что я вставить все дочерние объекты, а также в рабочей память, используя следующее правило:

rule "Insert Children" 
    when 
      $parent : Parent (eval(childrenList != empty)) 
        $ch : Child() from $p.childrenList 
    then 
      insert($ch); 
    end 

сейчас как я могу убедиться, что это правило не запускается, если дети уже вставлены. Я имею в виду, потому что я изменяю какой-то факт, что правило снова увольняется. Как я могу это предотвратить?

Благодаря

ответ

2

Вы могли бы попробовать добавить эту строку в состоянии when, хотя я подозреваю, что это не «право» идиома:

not(Child(this == $ch)) 
+0

Нет, что кажется хорошо - делать что-то подобное. Или вы можете использовать группу потоков или что-то, чтобы убедиться, что вы делаете это только спереди ... –