2016-09-28 42 views
0

我试图使用谓词向我的hazelcast地图中添加entrylistener以过滤条目。带嵌套密钥的Hazelcast PredicateBuilder

我打电话的方法是:

String addEntryListener(MapListener listener, 
Predicate<K,V> predicate, 
boolean includeValue) 

我想建立一个谓语用我的钥匙进行过滤。我的钥匙是HazelKey型具有以下字段:

KeyOne keyOne; 
KeyTwo keyTwo; 
KeyThree keyThree; 

然后这三个键有场:

String code 

因此,我试图做的线沿线的东西:

PredicateBuilder predicate = EntryObject.key().get("keyOne").get("code").equal("1234"); 

构建谓词以过滤keyOne值1234的所有条目。

然而,一旦监听器被添加,该项目得到更新,hazelcast引发错误:

Caused by: com.hazelcast.query.QueryException: java.lang.IllegalArgumentException: There is no suitable accessor for 'code' on class 'class com.sun.proxy.$Proxy45' 

我相信这是因为predicateBuilder只是忽略了顶级“KeyOne” paramater,只是用“代码”等等我的问题是:如何做这个多级谓词建立?

在此先感谢。

回答

0

我不是太熟悉PredicateBuilder,但我相信这应该为你工作:

import static com.hazelcast.query.Predicates.equal; [...] Predicate p = equal("keyOne.code", 1234);