2

日付フィールドを含むさまざまなフィールドを持つオブジェクトBのリストを含むオブジェクトAがあります。日付がリスト全体で一意であることを確認するルールを作成する必要がありますが、これを行う方法に少し行き詰まっています...次のようなものがあります。

rule "Check Unique Dates"
dialect "mvel"
when
    a : A
    list : java.util.List( ) from collect ( Date B.date (B.date!= null))
    set : java.util.Set( ) from collect ( Date B.date(B.date!= null))
    eval(list.size() == set.size())
then
    //do something
end

私がやろうとしているのは、オブジェクトBの日付をリストとセットに追加し、2つのサイズを比較することですが、エラーが発生します。

[ERR 102] Line 15:54 mismatched input 'B' in rule "Check Unique Dates" [0,0]: Parser returned a null Package

私が間違っていることについて何か考えはありますか?

また、Aのインスタンスが複数存在する可能性があるため、Aの名前フィールドで制限する必要があります。

もう少し近づいてきました...

when
    a : A

    b1 : B( d : date, date!= null )
    b2: B( date == d , eval( this != b1) )

しかし、これは、このAインスタンスのリストにない場合でも、Bのすべてのインスタンスをチェックします(Bインスタンスが6つしかない場合でも、ルールは1200回実行されます!?)...チェックをのみに制限するにはどうすればよいですか?このAインスタンスで重複を探しますか?

4

2 に答える 2

4

これが私が思いついたものです..そしてそれは動作します:

when
    a : A( name == "xyz", coll : listOfB)       
    b1 : B( date1 : date, date!= null ) from coll
    b2 : B( date == date1, this != b1) from coll

then

今度は暗い部屋に行って横になる必要があります...

于 2012-10-26T10:30:01.513 に答える
1

ListUtils.hasDuplicate(list) など、重複をチェックする別のメソッドを作成する方がよいと思います。

于 2014-02-26T05:43:55.493 に答える