При попытке применить реализацию QueryDSL для фильтрации поиска я столкнулся со следующей проблемой, которая, по меньшей мере, весьма запутана.
Рассмотрим следующие свойства в коллекции MongoDB под названием Payments:
Объект 1
- amountDue (Object)
- amount => 106.00 (String)
Объект 2
- amountDue (Object)
- amount => 58.80 (String)
Эти значения генерируются системой, и фактическим типом данных объекта amountDue
является org.joda.Объект BigMoney.
Эти свойства применяются в методе привязки, который используется для предоставления предиката QueryDSL, так что возвращаются любые объекты Payment, у которых свойство amountDue.amount
больше, чем указано в поисковом запросе.Такой метод описан ниже:
@Override
public Predicate bind(NumberPath<BigDecimal> bigDecimalNumberPath, Collection<? extends BigDecimal> value) {
ArrayList<? extends BigDecimal> amounts = new ArrayList<>(value);
return bigDecimalNumberPath.gt(amounts.get(0));
}
Ниже описываются случаи, с которыми я тестирую, среди прочего, с соответствующими результатами:
{URL}/payments/filter?page=0&amountDue.amount=10.00
, который внутренне преобразуется в 'amountDue.amount> 10.00' предикат возвращает оба объекта [Correct]
{URL}/payments/filter?page=0&amountDue.amount=20.00
, которые внутренне преобразуются в 'amountDue.amount> 20.00' возвращает только Объект 2 [Неверно]
{URL}/payments/filter?page=0&amountDue.amount=60.00
, который внутренне преобразуется в предикат 'amountDue.amount> 60.00' , не возвращает объектов [Неверно]
{URL}/payments/filter?page=0&amountDue.amount=100.00
, который внутренне преобразуется в предикат 'amountDue.amount> 100.00' , возвращает только объект 2 [Неверно]
{URL}/payments/filter?page=0&amountDue.amount=150.00
, который внутренне преобразуется в 'amountDue.amount> 150.00 ' предикат возвращает только Объект 2 [Неверно]
В тот момент, когда значение amount
для Объекта 1 изменяется на значение меньше 100, все случаи возвращают правильные результаты.
Что вы предлагаетеИоны / рекомендации, пожалуйста?
Спасибо за ваше время !!