From 5217731e9e418bb30883085bdfee70ff30cdc2cb Mon Sep 17 00:00:00 2001 From: bhavya-jpg Date: Fri, 6 Mar 2026 18:00:23 +0530 Subject: [PATCH] Optimize Queue Module database queries (Fix N+1 fetching and duplicate queries) - Enforce Lazy Loading on QueueEntry, Queue and QueueRoom - Remove Problematic Lombok Annotations that forced proxy loading - Fix AbstractBaseQueueDaoImpl.java to avoid duplicate querying --- .../dao/impl/AbstractBaseQueueDaoImpl.java | 1 - .../org/openmrs/module/queue/model/Queue.java | 10 +++----- .../module/queue/model/QueueEntry.java | 25 +++++++++++-------- .../openmrs/module/queue/model/QueueRoom.java | 5 ++-- 4 files changed, 21 insertions(+), 20 deletions(-) diff --git a/api/src/main/java/org/openmrs/module/queue/api/dao/impl/AbstractBaseQueueDaoImpl.java b/api/src/main/java/org/openmrs/module/queue/api/dao/impl/AbstractBaseQueueDaoImpl.java index a5319a09..0ff8edac 100644 --- a/api/src/main/java/org/openmrs/module/queue/api/dao/impl/AbstractBaseQueueDaoImpl.java +++ b/api/src/main/java/org/openmrs/module/queue/api/dao/impl/AbstractBaseQueueDaoImpl.java @@ -60,7 +60,6 @@ public Optional get(int id) { public Optional get(@NotNull String uuid) { Criteria criteria = getCurrentSession().createCriteria(getClazz()); includeVoidedObjects(criteria, false); - criteria.add(eq("uuid", uuid)).uniqueResult(); return Optional.ofNullable((Q) criteria.add(eq("uuid", uuid)).uniqueResult()); } diff --git a/api/src/main/java/org/openmrs/module/queue/model/Queue.java b/api/src/main/java/org/openmrs/module/queue/model/Queue.java index 6dcc0631..aab8f00d 100644 --- a/api/src/main/java/org/openmrs/module/queue/model/Queue.java +++ b/api/src/main/java/org/openmrs/module/queue/model/Queue.java @@ -25,7 +25,6 @@ import java.util.List; import java.util.stream.Collectors; -import lombok.EqualsAndHashCode; import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Setter; @@ -34,7 +33,6 @@ import org.openmrs.Concept; import org.openmrs.Location; -@EqualsAndHashCode(callSuper = true) @NoArgsConstructor @Setter @Getter @@ -49,19 +47,19 @@ public class Queue extends BaseChangeableOpenmrsMetadata { @Column(name = "queue_id") private Integer queueId; - @ManyToOne + @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "location_id", nullable = false) private Location location; - @ManyToOne + @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "service", referencedColumnName = "concept_id", nullable = false) private Concept service; - @ManyToOne + @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "priority_concept_set", referencedColumnName = "concept_id") private Concept priorityConceptSet; - @ManyToOne + @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "status_concept_set", referencedColumnName = "concept_id") private Concept statusConceptSet; diff --git a/api/src/main/java/org/openmrs/module/queue/model/QueueEntry.java b/api/src/main/java/org/openmrs/module/queue/model/QueueEntry.java index a2ab33be..1d721c3f 100644 --- a/api/src/main/java/org/openmrs/module/queue/model/QueueEntry.java +++ b/api/src/main/java/org/openmrs/module/queue/model/QueueEntry.java @@ -11,6 +11,7 @@ import javax.persistence.Column; import javax.persistence.Entity; +import javax.persistence.FetchType; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; @@ -21,7 +22,6 @@ import java.util.Date; -import lombok.EqualsAndHashCode; import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Setter; @@ -33,7 +33,6 @@ import org.openmrs.Provider; import org.openmrs.Visit; -@EqualsAndHashCode(callSuper = true) @NoArgsConstructor @Setter @Getter @@ -50,26 +49,30 @@ public class QueueEntry extends BaseChangeableOpenmrsData { private Integer queueEntryId; @ToString.Exclude - @ManyToOne + @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "queue_id", nullable = false) private Queue queue; - @ManyToOne + @ToString.Exclude + @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "patient_id", nullable = false) private Patient patient; - @ManyToOne + @ToString.Exclude + @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "visit_id") private Visit visit; - @ManyToOne + @ToString.Exclude + @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "priority", referencedColumnName = "concept_id", nullable = false) private Concept priority; @Column(name = "priority_comment") private String priorityComment; - @ManyToOne + @ToString.Exclude + @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "status", referencedColumnName = "concept_id", nullable = false) private Concept status; @@ -78,18 +81,20 @@ public class QueueEntry extends BaseChangeableOpenmrsData { private Double sortWeight = 0.0; //The Location the patient is waiting for, if any. - @ManyToOne + @ToString.Exclude + @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "location_waiting_for", referencedColumnName = "location_id") private Location locationWaitingFor; //The Provider the patient is waiting for, if any. - @ManyToOne + @ToString.Exclude + @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "provider_waiting_for", referencedColumnName = "provider_id") private Provider providerWaitingFor; //The queue the patient is coming from, if any. @ToString.Exclude - @OneToOne + @OneToOne(fetch = FetchType.LAZY) @JoinColumn(name = "queue_coming_from", referencedColumnName = "queue_id") private Queue queueComingFrom; diff --git a/api/src/main/java/org/openmrs/module/queue/model/QueueRoom.java b/api/src/main/java/org/openmrs/module/queue/model/QueueRoom.java index 8a837de4..ea58bfb6 100644 --- a/api/src/main/java/org/openmrs/module/queue/model/QueueRoom.java +++ b/api/src/main/java/org/openmrs/module/queue/model/QueueRoom.java @@ -11,6 +11,7 @@ import javax.persistence.Column; import javax.persistence.Entity; +import javax.persistence.FetchType; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; @@ -18,13 +19,11 @@ import javax.persistence.ManyToOne; import javax.persistence.Table; -import lombok.EqualsAndHashCode; import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Setter; import org.openmrs.BaseChangeableOpenmrsMetadata; -@EqualsAndHashCode(callSuper = true) @NoArgsConstructor @Setter @Getter @@ -39,7 +38,7 @@ public class QueueRoom extends BaseChangeableOpenmrsMetadata { @Column(name = "queue_room_id") private Integer queueRoom; - @ManyToOne + @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "queue_id", nullable = false) private Queue queue;