From 4f542915f54b94c68277958486d1dde6db65bcdf Mon Sep 17 00:00:00 2001 From: Seol_JY Date: Wed, 7 Aug 2024 15:55:15 +0900 Subject: [PATCH] Optimize entity deletion in SimpleJpaRepository. This change improves the performance of the delete method by first checking if the entity is already managed by the EntityManager. If so, it removes the entity directly without additional database queries. This optimization can reduce unnecessary database lookups in certain scenarios. Closes #3564 --- .../jpa/repository/support/SimpleJpaRepository.java | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 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 c716b4514..3b024ddbb 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 @@ -93,6 +93,7 @@ import org.springframework.util.Assert; * @author Yanming Zhou * @author Ernst-Jan van der Laan * @author Diego Krupitza + * @author Seol-JY */ @Repository @Transactional(readOnly = true) @@ -196,14 +197,16 @@ public class SimpleJpaRepository implements JpaRepositoryImplementation type = ProxyUtils.getUserClass(entity); - T existing = (T) entityManager.find(type, entityInformation.getId(entity)); - - // if the entity to be deleted doesn't exist, delete is a NOOP - if (existing == null) { + if (entityManager.contains(entity)) { + entityManager.remove(entity); return; } - entityManager.remove(entityManager.contains(entity) ? entity : entityManager.merge(entity)); + // if the entity to be deleted doesn't exist, delete is a NOOP + T existing = (T) entityManager.find(type, entityInformation.getId(entity)); + if (existing != null) { + entityManager.remove(entityManager.merge(entity)); + } } @Override