From 58fe95f1d63477a1c4a00b186d08ace56689f863 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 7d1a09e42..9ef6ba4b9 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