2009-08-05 4 views
4

Ich benutze Drools, um ein Objekt zu validieren. Das Objekt verfügt auch über eine getChildrenList() -Methode, die die untergeordneten Objekte zurückgibt, die zu diesem Objekt gehören (Master-Detail-Beziehung).Drools: Wie füge ich eine Tatsache ein, nachdem ich überprüft habe, ob sie nicht bereits im Arbeitsspeicher vorhanden ist

Ich habe einige Validierungen auf das Objekt und dann will ich das Kind validieren als auch Objekte, so füge ich alle das Kind als auch in den Arbeitsspeicherobjekte durch folgende Regel:

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

Jetzt Wie kann ich sicherstellen, dass diese Regel nicht ausgelöst wird, wenn die Kinder bereits eingefügt wurden? Ich meine, weil ich einige Fakten modifiziere, wird die Regel erneut ausgelöst. Wie kann ich das verhindern?

Dank

Antwort

2

Sie könnten versuchen, diese Zeile in der when Bedingung hinzugefügt, obwohl ich vermute, dass dies nicht das ‚richtige‘ Idiom ist:

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

Nein, das feine scheint - so etwas tun. Oder Sie können eine Flussgruppe oder etwas verwenden, um sicherzustellen, dass Sie das nur vorne tun ... –

Verwandte Themen