Java >> Java tutoriál >  >> Tag >> Spring

Agregační funkce Spring Data JPA na prázdné sadě výsledků

Pokud používáte Spring Data a vaše metoda vrací null když Hibernate nemůže najít shodu, nezapomeňte přidat @org.springframework.lang.Nullable k podpisu vaší metody:

public interface SomeRepositoryCustom {
    @org.springframework.lang.Nullable
    public Thing findOneThingByAttr(Attribute attr) {
        /* ...your logic here... */
    }
}

Je to proto, že Spring Data kontroluje nulovatelnost vaší metody, a pokud anotace chybí, vynutí si, že vždy musíte vrátit objekt:

/* org.springframework.data.repository.core.support.MethodInvocationValidator */

@Nullable
@Override
public Object invoke(@SuppressWarnings("null") MethodInvocation invocation) throws Throwable {
    /* ...snip... */

    if (result == null && !nullability.isNullableReturn()) {
        throw new EmptyResultDataAccessException("Result must not be null!", 1);
    }

    /* ...snip... */

Použil jsem Spring Boot verze 2.1.1.RELEASE a Spring Data 2.1.4.RELEASE .


Zdá se, že EmptyResultDataAccessException výjimka je vyvolána, když se očekávalo, že výsledek z dotazu bude mít alespoň jeden řádek (nebo prvek), ale nebyl vrácen žádný.

Související dokumentaci k tomuto lze nalézt zde.

Navrhoval bych spustit stejný dotaz, který se pokouší spustit, aby se tato teorie dále potvrdila. Teď je dobrá otázka, co s tím dělat.

Máte dvě možnosti. Buď chytit EmptyResultDataAccessException výjimku ve vašem volacím bodě a zpracujte ji přímo tam, nebo můžete mít ExceptionHandler která bude mít za úkol vyřizovat takové výjimky.

Oba způsoby řešení by měly být v pořádku a můžete si mezi nimi vybrat v závislosti na vašem scénáři.


Java Tag