복붙노트

[SPRING] CrudRepository 외부 파일에 @Query SQL을 저장하는 방법?

SPRING

CrudRepository 외부 파일에 @Query SQL을 저장하는 방법?

데이터베이스 연결을 위해 CrudRepository와 함께 Spring을 사용하고 있습니다.

이제는 꽤 긴 (몇 줄의) sql 쿼리가 필요합니다. 클래스 경로의 파일에서 코드 내에서 직접 유지하는 것이 좋습니다.

그러나 나는 이것을 어떻게 얻을 수 있습니까? 내 레포는 다음과 같이 보입니다.

@Query(value = "<my very long sql query>", nativeQuery = true) //how to inject file content?
@Modifying
@Transactional
public void executeSpecificSql();

해결법

  1. ==============================

    1.프로젝트 설정에 리소스 폴더가 있으면 /META-INF/jpa-named-queries.properties 파일 아래에 만들고 repoClass.methodName = yoursql과 같이 키 값 쌍을 추가하십시오. 봄 데이터가 나타납니다.

    프로젝트 설정에 리소스 폴더가 있으면 /META-INF/jpa-named-queries.properties 파일 아래에 만들고 repoClass.methodName = yoursql과 같이 키 값 쌍을 추가하십시오. 봄 데이터가 나타납니다.

    긴 검색어의 경우 xml 속성 파일을 CDATA 태그와 함께 사용하는 것이 가장 좋습니다. https://stackoverflow.com/a/19128259/1194415

  2. ==============================

    2.아래 단계를 사용하십시오.

    아래 단계를 사용하십시오.

  3. ==============================

    3.설정에 맞는지 확실하지는 않지만 다음 방법으로 수행 할 수 있습니다.

    설정에 맞는지 확실하지는 않지만 다음 방법으로 수행 할 수 있습니다.

    1) 태그를 사용하여 최대 절전 모드 매핑 파일에 쿼리 추가하기

    <sql-query name="MyQuery">.......
    

    2) 태그를 사용하여 위의 파일을 포함하는 최대 절전 모드 설정 파일을 정의하십시오

    <mapping resource="MyQuery.sql.xml"/>
    

    3) 위의 설정 파일을 가리키는 "hibernate.ejb.cfgfile"속성을 가진 지속성 파일 정의하기

    <property name="hibernate.ejb.cfgfile" value="hibernate.cfg.xml"/>
    

    4) 위의 특성 파일을 사용하여 EntityManagerFactory를 빌드하십시오

    이제 위 쿼리를 Repository 메서드에서 사용할 수 있습니다.

    @Query(name = "MyQuery", nativeQuery = true)
    [return type] executeMyQuery();
    
  4. from https://stackoverflow.com/questions/27902242/how-to-store-query-sql-in-external-file-for-crudrepository by cc-by-sa and MIT license