【发布时间】:2015-09-24 12:03:07
【问题描述】:
使用下面的规则,我正在尝试使用带有 OR 逻辑条件的规则来匹配帐户。在这种情况下,我有一个账户表和这些账户的保险记录表。并非所有账户都有保险记录。 Hibernate DAO 对象存在,并且存在从 Account 到 Insurance 的关联。我没有观察到这条规则的预期行为。在这种情况下,我希望账户 1、2、3 和 4 匹配此规则,因为该规则应匹配状态为“非活动”的任何账户或保险 CURRENT_IND 值为“N”的任何账户。但是,只有账户 2 和 4 符合规则。只有拥有保险记录的账户才会匹配规则。我想要所有状态 = 'Inactive' 的帐户记录,无论他们的保险记录是否存在。
我目前正在使用 Drools 5.6.10.FINAL 和 Hibernate 3.6.0 进行测试。
是否可以使用 Hibernate 和 Drools 创建这样的规则?是什么导致规则过滤保险记录的存在?
package com.app.Testing
import com.app.abilities.RuleBuilder.EvalObject;
import com.app.dao.Insurance;
import com.app.dao.Account;
rule "Null Test"
when
$V1 : Account( )
$V2 : Insurance( ) from $V1.getInsurance()
$V3 : EvalObject(
$V2.getCurrentInd == "N" ||
$V1.getStatus == "Inactive"
)
then
reply.getReplyList().add("Null Test");
end
示例数据:
Account:
ACCT_ID STATUS
1 Inactive
2 Inactive
3 Inactive
4 Active
5 Active
Insurance:
ID CURRENT_IND
2 N
4 N
5 Y
【问题讨论】: