From 70b858298cedd630adb80afbb204add6cf8fffa3 Mon Sep 17 00:00:00 2001 From: Ujjawal Prabhat Date: Wed, 3 Jun 2026 20:30:30 +0800 Subject: [PATCH] O3-5696: Fix ORM mapping, duplicate UUID query and null-patient display crash --- .../queue/api/dao/impl/AbstractBaseQueueDaoImpl.java | 1 - .../java/org/openmrs/module/queue/model/QueueEntry.java | 3 +-- .../module/queue/web/resources/QueueEntryResource.java | 9 +++++++-- .../queue/web/resources/QueueEntryResourceTest.java | 5 +++++ 4 files changed, 13 insertions(+), 5 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/QueueEntry.java b/api/src/main/java/org/openmrs/module/queue/model/QueueEntry.java index a2ab33be..b109d120 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 @@ -16,7 +16,6 @@ import javax.persistence.Id; import javax.persistence.JoinColumn; import javax.persistence.ManyToOne; -import javax.persistence.OneToOne; import javax.persistence.Table; import java.util.Date; @@ -89,7 +88,7 @@ public class QueueEntry extends BaseChangeableOpenmrsData { //The queue the patient is coming from, if any. @ToString.Exclude - @OneToOne + @ManyToOne @JoinColumn(name = "queue_coming_from", referencedColumnName = "queue_id") private Queue queueComingFrom; diff --git a/omod/src/main/java/org/openmrs/module/queue/web/resources/QueueEntryResource.java b/omod/src/main/java/org/openmrs/module/queue/web/resources/QueueEntryResource.java index 8f63592b..e3e1ec90 100644 --- a/omod/src/main/java/org/openmrs/module/queue/web/resources/QueueEntryResource.java +++ b/omod/src/main/java/org/openmrs/module/queue/web/resources/QueueEntryResource.java @@ -25,6 +25,7 @@ import io.swagger.models.properties.StringProperty; import lombok.Setter; import lombok.extern.slf4j.Slf4j; +import org.openmrs.Patient; import org.openmrs.PersonName; import org.openmrs.api.context.Context; import org.openmrs.module.queue.api.QueueServicesWrapper; @@ -281,8 +282,12 @@ private void addSharedResourceDescriptionProperties(DelegatingResourceDescriptio @PropertyGetter("display") public String getDisplay(QueueEntry queueEntry) { - PersonName personName = queueEntry.getPatient().getPersonName(); - return (personName == null ? queueEntry.getPatient().toString() : personName.getFullName()); + Patient patient = queueEntry.getPatient(); + if (patient == null) { + return queueEntry.getUuid(); + } + PersonName personName = patient.getPersonName(); + return (personName == null ? patient.toString() : personName.getFullName()); } @PropertyGetter("previousQueueEntry") diff --git a/omod/src/test/java/org/openmrs/module/queue/web/resources/QueueEntryResourceTest.java b/omod/src/test/java/org/openmrs/module/queue/web/resources/QueueEntryResourceTest.java index 4b51bcc4..9ca726ce 100644 --- a/omod/src/test/java/org/openmrs/module/queue/web/resources/QueueEntryResourceTest.java +++ b/omod/src/test/java/org/openmrs/module/queue/web/resources/QueueEntryResourceTest.java @@ -428,6 +428,11 @@ public void shouldSearchQueueEntriesByIncludeVoidedFalse() { assertThat(criteria.isIncludedVoided(), equalTo(false)); } + @Test + public void shouldReturnUuidForDisplayWhenPatientIsNull() { + assertThat(resource.getDisplay(queueEntry), is(QUEUE_ENTRY_UUID)); + } + @Test public void shouldInstantiateNewDelegate() { assertThat(getResource().newDelegate(), notNullValue());