001/* 002 * #%L 003 * HAPI FHIR JPA Server 004 * %% 005 * Copyright (C) 2014 - 2024 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.dao.data; 021 022import ca.uhn.fhir.jpa.entity.TermCodeSystemVersion; 023import ca.uhn.fhir.jpa.entity.TermConcept; 024import org.springframework.data.domain.Page; 025import org.springframework.data.domain.Pageable; 026import org.springframework.data.jpa.repository.JpaRepository; 027import org.springframework.data.jpa.repository.Modifying; 028import org.springframework.data.jpa.repository.Query; 029import org.springframework.data.repository.query.Param; 030 031import java.util.List; 032import java.util.Optional; 033 034public interface ITermConceptDao extends JpaRepository<TermConcept, Long>, IHapiFhirJpaRepository { 035 036 @Query("SELECT t FROM TermConcept t " + "LEFT JOIN FETCH t.myDesignations d " + "WHERE t.myId IN :pids") 037 List<TermConcept> fetchConceptsAndDesignationsByPid(@Param("pids") List<Long> thePids); 038 039 @Query("SELECT t FROM TermConcept t " + "LEFT JOIN FETCH t.myDesignations d " 040 + "WHERE t.myCodeSystemVersionPid = :pid") 041 List<TermConcept> fetchConceptsAndDesignationsByVersionPid(@Param("pid") Long theCodeSystemVersionPid); 042 043 @Query("SELECT COUNT(t) FROM TermConcept t WHERE t.myCodeSystem.myId = :cs_pid") 044 Integer countByCodeSystemVersion(@Param("cs_pid") Long thePid); 045 046 @Query("SELECT c FROM TermConcept c WHERE c.myCodeSystemVersionPid = :csv_pid AND c.myCode = :code") 047 Optional<TermConcept> findByCodeSystemAndCode( 048 @Param("csv_pid") Long theCodeSystemVersionPid, @Param("code") String theCode); 049 050 @Query("FROM TermConcept WHERE myCodeSystemVersionPid = :csv_pid AND myCode in (:codeList)") 051 List<TermConcept> findByCodeSystemAndCodeList( 052 @Param("csv_pid") Long theCodeSystem, @Param("codeList") List<String> theCodeList); 053 054 @Modifying 055 @Query("DELETE FROM TermConcept WHERE myCodeSystem.myId = :cs_pid") 056 int deleteByCodeSystemVersion(@Param("cs_pid") Long thePid); 057 058 @Query("SELECT c FROM TermConcept c WHERE c.myCodeSystem = :code_system") 059 List<TermConcept> findByCodeSystemVersion(@Param("code_system") TermCodeSystemVersion theCodeSystem); 060 061 @Query("SELECT t FROM TermConcept t WHERE t.myIndexStatus = null") 062 Page<TermConcept> findResourcesRequiringReindexing(Pageable thePageRequest); 063}