如何在 Drools 中访问嵌套的 class
How to access nested class in Drools
我是 Drools 的初学者。
我在 scala 中有这个模型:
case class OuterClass (int parentValue ) {
lazy val childs: Seq[InnerClass] = getChilds()
case class InnerClass (int childValue ) {
}
}
我需要创建一个 Drools 规则来检查 parents 与 parentValue = 1,并且至少有一个 child 与 childValue = 2
我创建了这条规则:
dialect "mvel"
import com.models.OuterClass
rule "1"
when
$parent: OuterClass($pv: parentValue, $c: childs, $pv == 1)
$parent.InnerClass($cv: childValue, $cv == 2) from $c
then
"do something"
end
但我收到以下错误:"Unable to resolve ObjectType '$parent.InnerClass'"
如何在 Drools 中访问嵌套的 class?
你快成功了!
您要找的规则是这样的:
rule "1"
when
$parent: OuterClass($pv: parentValue == 1)
$inner: InnerClass($cv: childValue == 2) from $parent.childs
then
"do something"
end
如你所见,parent和child的关系在from
的右边。
这条规则的问题在于,它会被执行的次数与 children 的值 == 2 和 OuterClass
object 的执行次数一样多。如果您只想检查是否存在 至少一个 child 且值为 ==2,那么您可以尝试这样的操作:
rule "1"
when
$parent: OuterClass($pv: parentValue == 1)
exists( InnerClass(childValue == 2)) from $parent.childs
then
"do something"
end
请注意,在这种情况下,您无法将变量绑定到第二个模式,因为您不知道它将是哪一个。
如果您需要获取有关 InnerClass
object/s 匹配模式的信息,但您仍然希望只执行一次规则,一个策略可以是收集所有 InnerClass
objects 在一个集合中:
rule "1"
when
$parent: OuterClass($pv: parentValue == 1)
$list: List(size > 0) from collect(
InnerClass(childValue == 2) from $parent.childs
)
then
"do something"
end
希望对您有所帮助,
我是 Drools 的初学者。 我在 scala 中有这个模型:
case class OuterClass (int parentValue ) {
lazy val childs: Seq[InnerClass] = getChilds()
case class InnerClass (int childValue ) {
}
}
我需要创建一个 Drools 规则来检查 parents 与 parentValue = 1,并且至少有一个 child 与 childValue = 2
我创建了这条规则:
dialect "mvel"
import com.models.OuterClass
rule "1"
when
$parent: OuterClass($pv: parentValue, $c: childs, $pv == 1)
$parent.InnerClass($cv: childValue, $cv == 2) from $c
then
"do something"
end
但我收到以下错误:"Unable to resolve ObjectType '$parent.InnerClass'"
如何在 Drools 中访问嵌套的 class?
你快成功了!
您要找的规则是这样的:
rule "1"
when
$parent: OuterClass($pv: parentValue == 1)
$inner: InnerClass($cv: childValue == 2) from $parent.childs
then
"do something"
end
如你所见,parent和child的关系在from
的右边。
这条规则的问题在于,它会被执行的次数与 children 的值 == 2 和 OuterClass
object 的执行次数一样多。如果您只想检查是否存在 至少一个 child 且值为 ==2,那么您可以尝试这样的操作:
rule "1"
when
$parent: OuterClass($pv: parentValue == 1)
exists( InnerClass(childValue == 2)) from $parent.childs
then
"do something"
end
请注意,在这种情况下,您无法将变量绑定到第二个模式,因为您不知道它将是哪一个。
如果您需要获取有关 InnerClass
object/s 匹配模式的信息,但您仍然希望只执行一次规则,一个策略可以是收集所有 InnerClass
objects 在一个集合中:
rule "1"
when
$parent: OuterClass($pv: parentValue == 1)
$list: List(size > 0) from collect(
InnerClass(childValue == 2) from $parent.childs
)
then
"do something"
end
希望对您有所帮助,