Switch to Query.getSingleResultOrNull().

We now use getSingleResultOrNull() to avoid NoResultException handling.

Closes: #3701
Original Pull Request: #3695
This commit is contained in:
Mark Paluch
2024-12-09 14:34:01 +01:00
parent 7acd18f752
commit 6c9c531664
2 changed files with 7 additions and 23 deletions

View File

@@ -16,7 +16,6 @@
package org.springframework.data.jpa.repository.query;
import jakarta.persistence.EntityManager;
import jakarta.persistence.NoResultException;
import jakarta.persistence.Query;
import jakarta.persistence.StoredProcedureQuery;
@@ -87,13 +86,7 @@ public abstract class JpaQueryExecution {
Assert.notNull(query, "AbstractJpaQuery must not be null");
Assert.notNull(accessor, "JpaParametersParameterAccessor must not be null");
Object result;
try {
result = doExecute(query, accessor);
} catch (NoResultException e) {
return null;
}
Object result = doExecute(query, accessor);
if (result == null) {
return null;
@@ -221,7 +214,7 @@ public abstract class JpaQueryExecution {
@Override
protected Object doExecute(AbstractJpaQuery query, JpaParametersParameterAccessor accessor) {
return query.createQuery(accessor).getSingleResult();
return query.createQuery(accessor).getSingleResultOrNull();
}
}

View File

@@ -19,7 +19,6 @@ import static org.springframework.data.jpa.repository.query.QueryUtils.*;
import jakarta.persistence.EntityManager;
import jakarta.persistence.LockModeType;
import jakarta.persistence.NoResultException;
import jakarta.persistence.Parameter;
import jakarta.persistence.Query;
import jakarta.persistence.TypedQuery;
@@ -442,12 +441,7 @@ public class SimpleJpaRepository<T, ID> implements JpaRepositoryImplementation<T
@Override
public Optional<T> findOne(Specification<T> spec) {
try {
return Optional.of(getQuery(spec, Sort.unsorted()).setMaxResults(2).getSingleResult());
} catch (NoResultException e) {
return Optional.empty();
}
return Optional.ofNullable(getQuery(spec, Sort.unsorted()).setMaxResults(2).getSingleResultOrNull());
}
@Override
@@ -564,13 +558,10 @@ public class SimpleJpaRepository<T, ID> implements JpaRepositoryImplementation<T
@Override
public <S extends T> Optional<S> findOne(Example<S> example) {
try {
return Optional
.of(getQuery(new ExampleSpecification<>(example, escapeCharacter), example.getProbeType(), Sort.unsorted())
.setMaxResults(2).getSingleResult());
} catch (NoResultException e) {
return Optional.empty();
}
TypedQuery<S> query = getQuery(new ExampleSpecification<>(example, escapeCharacter), example.getProbeType(),
Sort.unsorted()).setMaxResults(2);
return Optional.ofNullable(query.getSingleResultOrNull());
}
@Override