2009-08-05 4 views
4

J'utilise des baves pour valider un objet. L'objet possède également une méthode getChildrenList() qui renvoie les objets enfants associés à cet objet (relation maître-détail).Drools: Comment insérer un fait après avoir vérifié s'il n'est pas déjà présent dans la mémoire de travail

Je fais quelques validations sur l'objet et je veux valider l'enfant des objets aussi bien, donc j'insérer tous les objets enfants et dans la mémoire de travail en utilisant la règle suivante:

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

maintenant comment puis-je m'assurer que cette règle ne se déclenche pas si les enfants ont déjà été insérés. Je veux dire parce que je modifie certains faits, la règle est renvoyée. Comment puis-je empêcher cela?

Merci

Répondre

2

Vous pourriez essayer d'ajouter cette ligne à la condition when, même si je pense que ce n'est pas l'idiome « ​​droit »:

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

Non qui semble bien - faire quelque chose comme ça. Ou vous pouvez utiliser un groupe de flux ou quelque chose pour vous assurer que vous le faites seulement à l'avance ... –

Questions connexes