在 Drools 中激活子对象的规则
Activate Rules on child objects in Drools
我有两个名为 OptionalCover
和 OptionalPremiumComponent
的事实,OptionalCover
在其中引用了 OptionalPremiumComponent
。所以这就是我要插入工作记忆的内容。
private static OptionalCover getOptionalCover(Double sumAssured, Double premiumRate) {
OptionalPremiumComponent premiumComponent = new OptionalPremiumComponent();
premiumComponent.setSumAssured(sumAssured);
premiumComponent.setPremiumRate(premiumRate);
OptionalCover optionalCover = new OptionalCover();
optionalCover.setPremiumComponent(premiumComponent);
return optionalCover;
}
kieSession.insert(getOptionalCover(1000000.0, 0.02));
我在 drools 中创建了以下规则
import java.lang.Number;
rule "OptionalCoverCalculation"
dialect "java"
when
opc : OptionalPremiumComponent( sumAssured > 1I && sumAssured != null && premiumRate != null && premiumRate > 0.0 )
then
opc.setPremium( opc.getSumAssured() * 0.001 * opc.getPremiumRate() );
System.out.println("Here");
end
问题是,当我插入父对象时,上面的规则没有被触发。我是否需要做任何其他事情来启用此行为?是否支持?
谢谢。
Drools 引擎无法判断您的封面是否包含组件。 (好吧,它有,因为它可能会使用反射 - 但它应该在哪里停止?)
因此,您还必须插入 OptionalPremiumComponent。
为了减少代码中的混乱程度,您可以编写一些巧妙的方法,以便您可以通过一次调用插入 Cover 和 Component。
比如你有很多相似的"contains"关系,想自由推理,你可以实现s.th。喜欢
interface FactContainer {
List<Object> factChildren(); -- return all contained fact objects
-- OR --
void insertAll( KieSession ks );
}
其中 factChildren 将 return 带有 premiumComponent 的列表或空列表,或者,另一种方法是在内部处理所有内容的 insertAll 方法。
我有两个名为 OptionalCover
和 OptionalPremiumComponent
的事实,OptionalCover
在其中引用了 OptionalPremiumComponent
。所以这就是我要插入工作记忆的内容。
private static OptionalCover getOptionalCover(Double sumAssured, Double premiumRate) {
OptionalPremiumComponent premiumComponent = new OptionalPremiumComponent();
premiumComponent.setSumAssured(sumAssured);
premiumComponent.setPremiumRate(premiumRate);
OptionalCover optionalCover = new OptionalCover();
optionalCover.setPremiumComponent(premiumComponent);
return optionalCover;
}
kieSession.insert(getOptionalCover(1000000.0, 0.02));
我在 drools 中创建了以下规则
import java.lang.Number;
rule "OptionalCoverCalculation"
dialect "java"
when
opc : OptionalPremiumComponent( sumAssured > 1I && sumAssured != null && premiumRate != null && premiumRate > 0.0 )
then
opc.setPremium( opc.getSumAssured() * 0.001 * opc.getPremiumRate() );
System.out.println("Here");
end
问题是,当我插入父对象时,上面的规则没有被触发。我是否需要做任何其他事情来启用此行为?是否支持?
谢谢。
Drools 引擎无法判断您的封面是否包含组件。 (好吧,它有,因为它可能会使用反射 - 但它应该在哪里停止?)
因此,您还必须插入 OptionalPremiumComponent。
为了减少代码中的混乱程度,您可以编写一些巧妙的方法,以便您可以通过一次调用插入 Cover 和 Component。 比如你有很多相似的"contains"关系,想自由推理,你可以实现s.th。喜欢
interface FactContainer {
List<Object> factChildren(); -- return all contained fact objects
-- OR --
void insertAll( KieSession ks );
}
其中 factChildren 将 return 带有 premiumComponent 的列表或空列表,或者,另一种方法是在内部处理所有内容的 insertAll 方法。