Specifikacja z where, and... I problem z NullPointerException

0

Heja, wklejam kawałek specyfikacji, gdzie Sonar widzi problem z NullPointerException (do dwóch ostatnich and. się przyczepił). Kombinuję trochę z nawiasami, ale w tym przypadku to nie działa. Za wszelkie sugestie mega dzięki!

@Override
public Specification<xx> getDefaultSpecifications() {
    if (xxCriteria == null) {
        return (root, query, cb) -> query.getRestriction();
    }

    return Specification.where(inRadius(xxCriteria.getLatitude(), xxCriteria.getLongitude(), xxCriteria.getRadius()))
            .and((numberEquals(xxCriteria.getNumber()))
                    .and((roadEquals(xxCriteria.getRoad()))
                            .and((cityEquals(xxCriteria.getCity())))));
}
0

Ale co to w ogóle za API? Może zwyczajnie te and() mogą zwrócić nulla?

0

@Shalom: Masz rację. No właśnie te trzy ostatnie mogą zwrócić nulla. Jak to obejść? Bo z tego co widzę, jak jest and. w specyfikacji od dwóch parametrów, to tylko pierwszy nie może być Nullem, drugi może i Sonar nie widzi problemu. Jak to elegancko przemodelować się zastanawiam...

0

FYI: Spróbuję zrobić to predykatami. Wkleję rozwiązanie, jak się uda..

0

FYI Wystarczyło w:

`private Specification<xxx> typeIdEquals(Long typeId) {
        return Optional.ofNullable(typeId).isPresent() ? specificationsUtil.fieldEqual(xxx_.type, DynamicDictionaryPosition_.id, typeId) : null;`

drugą linijkę zastąpić:

`if (isNull(typeId)) {
            return Specification.where(null);
        }
        return specificationsUtil.fieldEqual(xxx_.type, DynamicDictionaryPosition_.id, typeId);
    }`

I chyba jest ok..

1 użytkowników online, w tym zalogowanych: 0, gości: 1