diff --git a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/dao/BaseHapiFhirResourceDao.java b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/dao/BaseHapiFhirResourceDao.java index 437dc33e9b86..af813d9465fd 100644 --- a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/dao/BaseHapiFhirResourceDao.java +++ b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/dao/BaseHapiFhirResourceDao.java @@ -105,6 +105,7 @@ import ca.uhn.fhir.rest.server.IPagingProvider; import ca.uhn.fhir.rest.server.IRestfulServerDefaults; import ca.uhn.fhir.rest.server.RestfulServerUtils; +import ca.uhn.fhir.rest.server.exceptions.InternalErrorException; import ca.uhn.fhir.rest.server.exceptions.InvalidRequestException; import ca.uhn.fhir.rest.server.exceptions.MethodNotAllowedException; import ca.uhn.fhir.rest.server.exceptions.PreconditionFailedException; @@ -132,6 +133,7 @@ import jakarta.servlet.http.HttpServletResponse; import org.apache.commons.lang3.Validate; import org.apache.commons.lang3.function.TriFunction; +import org.hibernate.exception.SQLGrammarException; import org.hl7.fhir.instance.model.api.IBaseCoding; import org.hl7.fhir.instance.model.api.IBaseMetaType; import org.hl7.fhir.instance.model.api.IBaseOperationOutcome; @@ -2017,8 +2019,15 @@ public IBundleProvider search( RequestPartitionId requestPartitionId = myRequestPartitionHelperService.determineReadPartitionForRequestForSearchType( theRequest, getResourceName(), theParams); - IBundleProvider retVal = mySearchCoordinatorSvc.registerSearch( - this, theParams, getResourceName(), cacheControlDirective, theRequest, requestPartitionId); + IBundleProvider retVal = null; + try { + retVal = mySearchCoordinatorSvc.registerSearch( + this, theParams, getResourceName(), cacheControlDirective, theRequest, requestPartitionId); + } catch (SQLGrammarException e) { + String trackingUUID = UUID.randomUUID().toString(); + ourLog.error("SQLGrammarException during search, tracking uuid: {}", trackingUUID, e); + throw new InternalErrorException("SQLGrammarException during search, tracking uuid: " + trackingUUID); + } if (retVal instanceof PersistedJpaBundleProvider) { PersistedJpaBundleProvider provider = (PersistedJpaBundleProvider) retVal;