From 21af901ea50ceaea0698eea02a6d43d1d074c223 Mon Sep 17 00:00:00 2001 From: Shay Keren Date: Tue, 5 Aug 2025 09:52:12 +0300 Subject: [PATCH 1/2] Fix N+1 query issue in Vet specialties field by changing to lazy fetch with batch size 10 --- .../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..a9c0c7d9738 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) + @BatchSize(size = 10) + @ManyToMany(fetch = FetchType.LAZY) @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 9358dc6a2c08adbaedb76ea6d6d9898f7b707f79 Mon Sep 17 00:00:00 2001 From: Shay Keren Date: Tue, 5 Aug 2025 09:52:49 +0300 Subject: [PATCH 2/2] Fix import formatting and add missing BatchSize import --- .../samples/petclinic/vet/Vet.java | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 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 a9c0c7d9738..a3299b30096 100644 --- a/src/main/java/org/springframework/samples/petclinic/vet/Vet.java +++ b/src/main/java/org/springframework/samples/petclinic/vet/Vet.java @@ -19,17 +19,17 @@ import java.util.Collections; import java.util.HashSet; import java.util.List; -import java.util.Set; - -import org.springframework.beans.support.MutableSortDefinition; +import java.util.Set;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; import jakarta.persistence.ManyToMany; import jakarta.persistence.Table; import jakarta.xml.bind.annotation.XmlElement; +import org.hibernate.annotations.BatchSize; /** * Simple JavaBean domain object representing a veterinarian. @@ -40,15 +40,14 @@ * @author Arjen Poutsma */ @Entity -@Table(name = "vets")public class Vet extends Person { +@Table(name = "vets") +public class Vet extends Person { @BatchSize(size = 10) @ManyToMany(fetch = FetchType.LAZY) @JoinTable(name = "vet_specialties", joinColumns = @JoinColumn(name = "vet_id"), inverseJoinColumns = @JoinColumn(name = "specialty_id")) - private Set specialties; - - protected Set getSpecialtiesInternal() { + private Set specialties;protected Set getSpecialtiesInternal() { if (this.specialties == null) { this.specialties = new HashSet<>(); }