这是我的规则
rule "ICodes in HISTORY"
@filename("ORDERING.drl")
ruleflow-group "ORDERING_MAIN"
lock-on-active true
salience 5000
when
icodeColl: ArrayList (size > 0) from collect ( CodeFact( traceSegments contains RuleConstant.Seg.H, position == null, type == RuleConstant.CodeSource.I) )
ccodeColl: ArrayList (size >= 0) from collect ( CodeFact( type == RuleConstant.CodeSource.C) )
orderHier: OrderHierarchy( identifier ==
RuleConstant.ReferenceTables.IHIER)
theCase: CaseFact()
then
ArrayList hOrderedIcodes= orderHier.order(icodeColl, ccodeColl);
for (int i=0; i<hOrderedIcodes.size(); i++) {
CodeFact icode = (CodeFact)hOrderedIcodes.get(i);
int positionCount = theCase.getPositionCount();
icode.setPosition( BigInteger.valueOf( positionCount ) );
theCase.incrementPosition();
update( icode);
}
end
这是我得到的错误。我知道CodeFact正在被另一个规则收回,但我很疯狂,我会在when子句中吞并它,但是在then子句中它不能用于更新。
org.drools.FactException:更新错误:找不到对象的句柄: CodeFact @ 2a501b38 {xxx.xxx,1,1.0}。 它在工作记忆中吗?
答案 0 :(得分:0)
对于遇到这个问题的人来说,11个月后仍然像我一样: 我一直在使用drools开发一个稍微更老的项目,我们总是使用Java 7运行它。在尝试使用Java 8运行我的项目后出现此错误。希望这对某人有帮助,因为我找不到直接的答案谷歌搜索。这只是我对这个错误的体验,希望这是你的原因!