
001/* 002 * #%L 003 * HAPI FHIR JPA Model 004 * %% 005 * Copyright (C) 2014 - 2025 Smile CDR, Inc. 006 * %% 007 * Licensed under the Apache License, Version 2.0 (the "License"); 008 * you may not use this file except in compliance with the License. 009 * You may obtain a copy of the License at 010 * 011 * http://www.apache.org/licenses/LICENSE-2.0 012 * 013 * Unless required by applicable law or agreed to in writing, software 014 * distributed under the License is distributed on an "AS IS" BASIS, 015 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 016 * See the License for the specific language governing permissions and 017 * limitations under the License. 018 * #L% 019 */ 020package ca.uhn.fhir.jpa.model.listener; 021 022import ca.uhn.fhir.jpa.model.entity.BaseResourceIndexedSearchParam; 023import ca.uhn.fhir.jpa.model.entity.StorageSettings; 024import jakarta.persistence.PrePersist; 025import jakarta.persistence.PreUpdate; 026import org.springframework.beans.factory.annotation.Autowired; 027 028/** 029 * Sets <code>SP_NAME, RES_TYPE</code> column values to null for all HFJ_SPIDX tables 030 * if storage setting {@link ca.uhn.fhir.jpa.model.entity.StorageSettings#isIndexStorageOptimized()} is enabled. 031 * Sets <code>SP_UPDATED</code> column value to null for all HFJ_SPIDX tables. 032 * <p> 033 * Using EntityListener to change HFJ_SPIDX column values right before insert/update to database. 034 * </p> 035 * See {@link ca.uhn.fhir.jpa.model.entity.StorageSettings#setIndexStorageOptimized(boolean)} 036 */ 037public class IndexStorageOptimizationListener { 038 039 public IndexStorageOptimizationListener(@Autowired StorageSettings theStorageSettings) { 040 this.myStorageSettings = theStorageSettings; 041 } 042 043 private final StorageSettings myStorageSettings; 044 045 @PrePersist 046 @PreUpdate 047 public void optimizeSearchParams(Object theEntity) { 048 if (theEntity instanceof BaseResourceIndexedSearchParam) { 049 if (myStorageSettings.isIndexStorageOptimized()) { 050 ((BaseResourceIndexedSearchParam) theEntity).optimizeIndexStorage(); 051 } 052 ((BaseResourceIndexedSearchParam) theEntity).setUpdated(null); 053 } 054 } 055}