From eec333c4281bf4466101631fe246bd75b6b965f0 Mon Sep 17 00:00:00 2001 From: Shay Keren Date: Wed, 23 Jul 2025 17:13:27 +0300 Subject: [PATCH 1/3] fix: change ManyToMany fetch type to LAZY and add BatchSize for optimized loading --- .../springframework/samples/petclinic/vet/Vet.java | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/src/main/java/org/springframework/samples/petclinic/vet/Vet.java b/src/main/java/org/springframework/samples/petclinic/vet/Vet.java index 7a70155c3ea..27477fcd49e 100644 --- a/src/main/java/org/springframework/samples/petclinic/vet/Vet.java +++ b/src/main/java/org/springframework/samples/petclinic/vet/Vet.java @@ -23,9 +23,7 @@ import org.springframework.beans.support.MutableSortDefinition; import org.springframework.beans.support.PropertyComparator; -import org.springframework.samples.petclinic.model.Person; - -import jakarta.persistence.Entity; +import org.springframework.samples.petclinic.model.Person;import jakarta.persistence.Entity; import jakarta.persistence.FetchType; import jakarta.persistence.JoinColumn; import jakarta.persistence.JoinTable; @@ -42,10 +40,10 @@ * @author Arjen Poutsma */ @Entity -@Table(name = "vets") -public class Vet extends Person { +@Table(name = "vets")public class Vet extends Person { - @ManyToMany(fetch = FetchType.EAGER) + @ManyToMany(fetch = FetchType.LAZY) + @BatchSize(size=100) @JoinTable(name = "vet_specialties", joinColumns = @JoinColumn(name = "vet_id"), inverseJoinColumns = @JoinColumn(name = "specialty_id")) private Set specialties; @@ -76,4 +74,4 @@ public void addSpecialty(Specialty specialty) { getSpecialtiesInternal().add(specialty); } -} +} \ No newline at end of file From f5ac1c6fd8fb4902ddee8dcfa8691c9e18092f9d Mon Sep 17 00:00:00 2001 From: Shay Keren Date: Wed, 23 Jul 2025 17:13:48 +0300 Subject: [PATCH 2/3] feat: optimize vet specialties loading with entity graph --- .../samples/petclinic/vet/VetRepository.java | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/src/main/java/org/springframework/samples/petclinic/vet/VetRepository.java b/src/main/java/org/springframework/samples/petclinic/vet/VetRepository.java index 8b9e0823c86..753967e270f 100644 --- a/src/main/java/org/springframework/samples/petclinic/vet/VetRepository.java +++ b/src/main/java/org/springframework/samples/petclinic/vet/VetRepository.java @@ -20,9 +20,7 @@ import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.data.repository.Repository; -import org.springframework.transaction.annotation.Transactional; - -import java.util.Collection; +import org.springframework.transaction.annotation.Transactional;import java.util.Collection; /** * Repository class for Vet domain objects All method names are compliant @@ -34,13 +32,13 @@ * @author Juergen Hoeller * @author Sam Brannen * @author Michael Isvy - */ -public interface VetRepository extends Repository { + */public interface VetRepository extends Repository { /** * Retrieve all Vets from the data store. * @return a Collection of Vets */ + @EntityGraph(attributePaths = {"specialties"}) @Transactional(readOnly = true) @Cacheable("vets") Collection findAll() throws DataAccessException; @@ -51,8 +49,9 @@ public interface VetRepository extends Repository { * @return * @throws DataAccessException */ + @EntityGraph(attributePaths = {"specialties"}) @Transactional(readOnly = true) @Cacheable("vets") Page findAll(Pageable pageable) throws DataAccessException; -} +} \ No newline at end of file From 658e5a976a5c5ed736913b45763b1ecbfad4b291 Mon Sep 17 00:00:00 2001 From: Shay Keren Date: Wed, 23 Jul 2025 17:14:09 +0300 Subject: [PATCH 3/3] Add indexes for vet_specialties and specialties tables --- .../resources/db/migration/V5__add_vet_specialties_indexes.sql | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 src/main/resources/db/migration/V5__add_vet_specialties_indexes.sql diff --git a/src/main/resources/db/migration/V5__add_vet_specialties_indexes.sql b/src/main/resources/db/migration/V5__add_vet_specialties_indexes.sql new file mode 100644 index 00000000000..0298146a142 --- /dev/null +++ b/src/main/resources/db/migration/V5__add_vet_specialties_indexes.sql @@ -0,0 +1,3 @@ +CREATE INDEX IF NOT EXISTS idx_vet_specialties_vet_id ON vet_specialties (vet_id); +CREATE INDEX IF NOT EXISTS idx_vet_specialties_specialty_id ON vet_specialties (specialty_id); +CREATE INDEX IF NOT EXISTS idx_specialties_id ON specialties (id); \ No newline at end of file