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.