docs: @Override
  	public DeleteMethodOutcome deleteByUrl(String theUrl, List<DeleteConflict> deleteConflicts, RequestDetails theRequest) {
  		StopWatch w = new StopWatch();
  
  		Set<Long> resourceIds = myMatchResourceUrlService.processMatchUrl(theUrl, myResourceType);
  		if (resourceIds.size() > 1) {
  			if (myDaoConfig.isAllowMultipleDelete() == false) {
  				throw new PreconditionFailedException(getContext().getLocalizer().getMessage(BaseHapiFhirDao.class, "transactionOperationWithMultipleMatchFailure", "DELETE", theUrl, resourceIds.size()));
  			}
  		}
  
  		List<ResourceTable> deletedResources = new ArrayList<>();
  		for (Long pid : resourceIds) {
  			ResourceTable entity = myEntityManager.find(ResourceTable.class, pid);
  			deletedResources.add(entity);
  
  			T resourceToDelete = toResource(myResourceType, entity, null, false);
  
  			// Notify IServerOperationInterceptors about pre-action call
  			HookParams hooks = new HookParams()
  				.add(IBaseResource.class, resourceToDelete)
  				.add(RequestDetails.class, theRequest)
  				.addIfMatchesType(ServletRequestDetails.class, theRequest);
  			myInterceptorBroadcaster.callHooks(Pointcut.STORAGE_PRESTORAGE_RESOURCE_DELETED, hooks);
  
  			validateOkToDelete(deleteConflicts, entity, false);
  
  			// Notify interceptors
  			IdDt idToDelete = entity.getIdDt();
  			if (theRequest != null) {
  				ActionRequestDetails requestDetails = new ActionRequestDetails(theRequest, idToDelete.getResourceType(), idToDelete);
  				notifyInterceptors(RestOperationTypeEnum.DELETE, requestDetails);
  			}
  
  			// Perform delete
  
  			updateEntityForDelete(theRequest, entity);
  			resourceToDelete.setId(entity.getIdDt());
  
  			// Notify JPA interceptors
  			TransactionSynchronizationManager.registerSynchronization(new TransactionSynchronizationAdapter() {
  				@Override
  				public void beforeCommit(boolean readOnly) {
  					HookParams hookParams = new HookParams()
  						.add(IBaseResource.class, resourceToDelete)
  						.add(RequestDetails.class, theRequest)
  						.addIfMatchesType(ServletRequestDetails.class, theRequest);
  					myInterceptorBroadcaster.callHooks(Pointcut.STORAGE_PRECOMMIT_RESOURCE_DELETED, hookParams);
  				}
  			});
  		}
  
  		IBaseOperationOutcome oo;
  		if (deletedResources.isEmpty()) {
  			oo = OperationOutcomeUtil.newInstance(getContext());
  			String message = getContext().getLocalizer().getMessage(BaseHapiFhirResourceDao.class, "unableToDeleteNotFound", theUrl);
  			String severity = "warning";
  			String code = "not-found";
  			OperationOutcomeUtil.addIssue(getContext(), oo, severity, message, null, code);
  		} else {
  			oo = OperationOutcomeUtil.newInstance(getContext());
  			String message = getContext().getLocalizer().getMessage(BaseHapiFhirResourceDao.class, "successfulDeletes", deletedResources.size(), w.getMillis());
  			String severity = "information";
  			String code = "informational";
  			OperationOutcomeUtil.addIssue(getContext(), oo, severity, message, null, code);
  		}
  
  		ourLog.debug("Processed delete on {} (matched {} resource(s)) in {}ms", theUrl, deletedResources.size(), w.getMillis());
  
  		DeleteMethodOutcome retVal = new DeleteMethodOutcome();
  		retVal.setDeletedEntities(deletedResources);
  		retVal.setOperationOutcome(oo);
  		return retVal;
  	}