From fe7193024b3ddb5fabf91e12a7a22ef4a8aa406c Mon Sep 17 00:00:00 2001 From: Mark Paluch Date: Fri, 2 Jun 2023 14:35:31 +0200 Subject: [PATCH] Polishing. Reuse comment hint retrieval. Reorder methods. Inline methods and use fluent API where possible. See #2991 Original pull request: #2995 --- .../support/SimpleJpaRepository.java | 85 ++++++++++--------- 1 file changed, 47 insertions(+), 38 deletions(-) diff --git a/spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/support/SimpleJpaRepository.java b/spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/support/SimpleJpaRepository.java index 2881bf640..dd887e8da 100644 --- a/spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/support/SimpleJpaRepository.java +++ b/spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/support/SimpleJpaRepository.java @@ -38,6 +38,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Optional; +import java.util.function.BiConsumer; import java.util.function.Function; import java.util.stream.Collectors; import java.util.stream.StreamSupport; @@ -225,9 +226,11 @@ public class SimpleJpaRepository implements JpaRepositoryImplementation implements JpaRepositoryImplementation hints = new HashMap<>(); - - getQueryHints().withFetchGraphs(em).forEach(hints::put); - - if (metadata != null && metadata.getComment() != null && provider.getCommentHintKey() != null) { - hints.put(provider.getCommentHintKey(), provider.getCommentHintValue(metadata.getComment())); - } + Map hints = getHints(); return Optional.ofNullable(type == null ? em.find(domainType, id, hints) : em.find(domainType, id, type, hints)); } - /** - * Returns {@link QueryHints} with the query hints based on the current {@link CrudMethodMetadata} and potential - * {@link EntityGraph} information. - */ - protected QueryHints getQueryHints() { - return metadata == null ? NoHints.INSTANCE : DefaultQueryHints.of(entityInformation, metadata); - } - - /** - * Returns {@link QueryHints} with the query hints on the current {@link CrudMethodMetadata} for count queries. - */ - protected QueryHints getQueryHintsForCount() { - return metadata == null ? NoHints.INSTANCE : DefaultQueryHints.of(entityInformation, metadata).forCounts(); - } - @Deprecated @Override public T getOne(ID id) { @@ -432,7 +413,7 @@ public class SimpleJpaRepository implements JpaRepositoryImplementation findAll(Pageable pageable) { - if (isUnpaged(pageable)) { + if (pageable.isUnpaged()) { return new PageImpl<>(findAll()); } @@ -458,7 +439,7 @@ public class SimpleJpaRepository implements JpaRepositoryImplementation findAll(@Nullable Specification spec, Pageable pageable) { TypedQuery query = getQuery(spec, pageable); - return isUnpaged(pageable) ? new PageImpl<>(query.getResultList()) + return pageable.isUnpaged() ? new PageImpl<>(query.getResultList()) : readPage(query, getDomainClass(), pageable, spec); } @@ -489,9 +470,12 @@ public class SimpleJpaRepository implements JpaRepositoryImplementation boolean exists(Example example) { Specification spec = new ExampleSpecification<>(example, this.escapeCharacter); - CriteriaQuery cq = this.em.getCriteriaBuilder().createQuery(Integer.class); - cq.select(this.em.getCriteriaBuilder().literal(1)); + CriteriaQuery cq = this.em.getCriteriaBuilder() // + .createQuery(Integer.class) // + .select(this.em.getCriteriaBuilder().literal(1)); + applySpecificationToCriteria(spec, example.getProbeType(), cq); + TypedQuery query = applyRepositoryMethodMetadata(this.em.createQuery(cq)); return query.setMaxResults(1).getResultList().size() == 1; } @@ -541,7 +525,7 @@ public class SimpleJpaRepository implements JpaRepositoryImplementation probeType = example.getProbeType(); TypedQuery query = getQuery(new ExampleSpecification<>(example, escapeCharacter), probeType, pageable); - return isUnpaged(pageable) ? new PageImpl<>(query.getResultList()) : readPage(query, probeType, pageable, spec); + return pageable.isUnpaged() ? new PageImpl<>(query.getResultList()) : readPage(query, probeType, pageable, spec); } @Override @@ -777,6 +761,21 @@ public class SimpleJpaRepository implements JpaRepositoryImplementation implements JpaRepositoryImplementation TypedQuery applyRepositoryMethodMetadataForCount(TypedQuery query) { @@ -851,9 +847,26 @@ public class SimpleJpaRepository implements JpaRepositoryImplementation getHints() { + + Map hints = new HashMap<>(); + + getQueryHints().withFetchGraphs(em).forEach(hints::put); + + if (metadata != null) { + applyComment(metadata, hints::put); + } + + return hints; + } + + private void applyComment(CrudMethodMetadata metadata, BiConsumer consumer) { if (metadata.getComment() != null && provider.getCommentHintKey() != null) { - query.setHint(provider.getCommentHintKey(), provider.getCommentHintValue(metadata.getComment())); + consumer.accept(provider.getCommentHintKey(), provider.getCommentHintValue(this.metadata.getComment())); } } @@ -876,10 +889,6 @@ public class SimpleJpaRepository implements JpaRepositoryImplementation