Sorry, the actual error in my logic was totally unrelated to the fragment below.

The problem was that the DQAttribute that should have matched below was inserted by another rule, but the insertion was done at a time when the checkViolations collection was still emtpy. And I had forgotten the modify() after filling the checkViolations collection.

So the rule "saw" an empty collection and that last condition did not trigger. Once I corrected that, things started working :-)

On 08/03/2013 10:59 PM, Joe Ammann wrote:
Here's what I currently have (Drools 5.5.0 btw):

rule "R2030: UpdateDQAttribute"
dialect "mvel"
agenda-group "PROCESS_CHECKRESULTS"
when
    pv : PriceViolation ( p : changedPrice.price, dqc : check )
    ps : PriceSeries ( id == p.seriesId )
    i : Instrument ( id == ps.instrument.id )
    dqa : DQAttribute ( rootId == i.id, objectId == p.id )
    not dqcv : DQCheckViolation ( check.id == dqc.id ) from dqa.checkViolations
then
    # debug
    for (DQCheckViolation dqcv : dqa.checkViolations) {
        logger.debug("dqc: {}, dqcv: {}", dqc.id, dqcv.check.id);
   
    }
end

The rule fires and the log statement produces

PriceCheck: dqc: 6fc6636b-9b7c-4302-bce7-1680eec57830, dqcv: 6fc6636b-9b7c-4302-bce7-1680eec57830
The ids are the same, so I would have expected that last LHS condition to avoid that the rule fires.

-- 
CU, Joe