Проблема с MongoDB (QueryDSL)
public CollectionDto<DepartmentSelectDto> selectDepartment(@RequestParam(value = "name", required = false) String name,
@RequestParam(value = "shortName", required = false) String shortName,
@RequestParam(value = "hasParent", required = false) Boolean hasParent,
@RequestParam(value = "parentId", required = false) String parentId,
@RequestParam(value = "size") Integer size) {
Есть контроллер который принимает эти параметры, по ним собственно должна осуществляться фильтрация в базе
@Service
@RequiredArgsConstructor(onConstructor_ = @Autowired)
public class DepartmentServiceImpl implements DepartmentService {
private final DepartmentRepository repository;
@Override
public Page<Department> selectDepartment(DepartmentSelectArgument argument,
Pageable pageable) {
QDepartment department = QDepartment.department;
BooleanBuilder predicate = new BooleanBuilder();
predicate.and(mapOrNull(argument.getName(), department.name::equalsIgnoreCase))
.and(mapOrNull(argument.getShortName(), department.shortName::containsIgnoreCase))
.and(mapOrNull(argument.getParentId(), department.parentId::containsIgnoreCase));
if (argument.getHasParent() != null) {
predicate.and(argument.getHasParent() ?
department.parentId.isNotNull() :
department.parentId.isNull());
}
return repository.findAll(predicate, pageable);
}
Есть сервис который все это обрабатывает(Промежуточные слои не стал указывать (Dto, Argument)) И собственно вопрос почему, когда я запускаю интеграционные тесты с датасетами вместо данных из реальной базы, все хорошо, работает , но как только начинаю проверять фильтр на реальной базе, фильтр
if (argument.getHasParent() != null) {
predicate.and(argument.getHasParent() ?
department.parentId.isNotNull() :
department.parentId.isNull());
}
не работает(выдает 0 кол-во элементов)
Особенности: данные в датасетах абсолютно идентичны по структуре с реальной базой, Вычитал что подобных случаях $execute при фактическом(сгенерированном QueryDSL)запросе в базу должен передаваться со значением true, но при вызове
department.parentId.isNull()
запрос (в нем же $execute) летит со значением false
Как это все поправить?