【发布时间】:2017-04-19 22:12:56
【问题描述】:
我有这个类层次结构:
DomainParent{List<Details>, Boolean isCalculatedTypes(defaults false)}
Detail{List<SubDetail>}
SubDetail{TypeEnum}
还有这个枚举:
TypeEnum{Type1, Type2, Type3}
我想创建一个 drools 规则来检查所有 SubDetails 是否具有 Type1 或 Type2 以及另一个规则,如果 SubDetails 列表包含任何不同的 Type 组合就会触发。
到目前为止,我有这条规则,无论如何都会执行,即使所有 SubDetails 都有 Type3:
rule "calculate sub details with types 1 and 2"
when
$parent: DomainParent(!isCalculatedTypes())
$subDetails: List() from accumulate($detail: Detail() from $parent.getDetails();
collectList($detail.getSubDetails()))
forall(SubDetail(getTypeEnum() == TypeEnum.1() || getTypeEnum() == TypeEnum.2() from $subDetails)
then
System.out.println("begin calculating types");
//DO SOMETHING
$parent.setCalculatedTypes(true);
update($parent);
System.out.println("DONE calculating types");
end
【问题讨论】: