У меня есть два кэша в моем приложении. Я должен сделать фильтр И, где левая часть фильтра относится к кешу «A», а правая часть фильтра - к кешу «B».Фильтр когерентности по нескольким кешам
Можно ли это сделать?
Мой текущий фильтр как:
AllFilter(
AllFilter(
EqualsFilter(PofExtractor(target=VALUE, navigator=SimplePofPath(indices=0)), 1),
EqualsFilter(PofExtractor(target=VALUE, navigator=SimplePofPath(indices=1)), C)
),
AndFilter(
GreaterFilter(PofExtractor(target=VALUE, navigator=SimplePofPath(indices=4)), 1998-12-31 00:00:00.0),
OrFilter(
AndFilter(
EqualsFilter(PofExtractor(target=VALUE, navigator=SimplePofPath(indices=33)), S),
GreaterFilter(PofExtractor(target=VALUE, navigator=SimplePofPath(indices=27)), 280)
),
AndFilter(
EqualsFilter(PofExtractor(target=VALUE, navigator=SimplePofPath(indices=33)), N),
GreaterFilter(PofExtractor(target=VALUE, navigator=SimplePofPath(indices=26)), 280)
)
)
)
)
проблема заключается в том, что это экстракторы должны действовать более Дифференц кэшей. Если все условия находятся в одном кэше, то код будет:
list.addAll(cacheA.keySet(myFilter));
, но на самом деле фильтр более трех различных кэшей:
cacheA ->
AllFilter(
EqualsFilter(PofExtractor(target=VALUE, navigator=SimplePofPath(indices=0)), 1),
EqualsFilter(PofExtractor(target=VALUE, navigator=SimplePofPath(indices=1)), C)
)
cacheB ->
GreaterFilter(PofExtractor(target=VALUE, navigator=SimplePofPath(indices=4)), 1998-12-31 00:00:00.0)
cacheC and CacheA ->
OrFilter(
AndFilter(
CacheA --> EqualsFilter(PofExtractor(target=VALUE, navigator=SimplePofPath(indices=33)), S),
CacheB --> GreaterFilter(PofExtractor(target=VALUE, navigator=SimplePofPath(indices=27)), 280)
),
AndFilter(
CacheA --> EqualsFilter(PofExtractor(target=VALUE, navigator=SimplePofPath(indices=33)), N),
CacheB --> GreaterFilter(PofExtractor(target=VALUE, navigator=SimplePofPath(indices=26)), 280)
)
)
)
сердечный привет
это выглядит, как вы хотите реализовать если (CacheA.getValue() == CacheB.getValue()) \t возвращение А. это правильно? –