我的工作记忆中有很多PersonEntity。我需要编写一个规则来检查工作内存中是否存在两个具有相同someProperty的PersonEntity。我写的如下,但问题是,当真的有两个具有相同someProperty的PersonEntity时,sys.out正在执行两次:
when
$person : PersonEntity(person.personType == PersonType.LegalPerson);
$personList : ArrayList( size > 1 ) from collect( PersonEntity(someProperty.id == $legalPerson.someProperty.id))
then
System.out.println("error occured");
我也尝试了这个,但我认为因为我的工作记忆有许多PersonEntities,规则执行4次(PersonEntitys数量)和我的"错误发生"句子在控制台中显示4次:
PersonEntity(some conditions, $relatedId :relatedPerson.id);
exists PersonEntity(some conditions, relatedPerson.id > $relatedId)
答案 0 :(得分:0)
此问题的标准解决方案是使用唯一属性添加另一个约束,以保证排序。
when
PersonEntity(personType == PersonType.LegalPerson, $pid: personId)
exists PersonEntity(personType == PersonType.LegalPerson, personId > $pid)
then
// two LegalPerson
如果您期望三个或更多相同,您甚至可能需要添加另一个模式来阻止多次激活:
when
PersonEntity(personType == PersonType.LegalPerson, $pid: personId)
not PersonEntity(personType == PersonType.LegalPerson, personId < $pid )
exists PersonEntity(personType == PersonType.LegalPerson, personId > $pid)
then
// two or more LegalPerson
(除非你真的需要所有这些,否则使用收集的建议并不好。)
即使您需要检查任何personType:
,这也会有效 when
PersonEntity( $pt: personType, $pid: personId)
not PersonEntity(personType == $pt, personId < $pid )
exists PersonEntity(personType == $pt, personId > $pid)
then
// two or more $pt
在这里,您可以添加一个集合而不是第三个模式来获取所有此类PersonEntity事实。