복붙노트

[SPRING] 스프링 데이터 REST 투영 뒤에서 생성 된 SQL 쿼리 수정

SPRING

스프링 데이터 REST 투영 뒤에서 생성 된 SQL 쿼리 수정

편집하다 : 스프링 데이터 레스트 투영을 위해 SELECT에 필요한 열만 유지하는 방법?

Spring Data Rest 프로젝션은 생성 된 링크에 대해 열의 하위 집합을 가져 오는 데 적합하지만 뒤에 생성되는 Query에는 여전히 모든 열이 있습니다.

프로젝션은 SQL 쿼리가 SELECT에있는 Projection에있는 컬럼만을 가지고있는 곳에서 어떻게 생성 될 수 있습니까?

해결법

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

    1.왜 문서에서 빠졌는지 모르겠지만 이번 봄 샘플 (봄부터)에서는 @Query의 반환 유형으로 프로젝션을 사용할 수 있음을 보여줍니다. 그래서 당신은 할 수 있습니다 :

    왜 문서에서 빠졌는지 모르겠지만 이번 봄 샘플 (봄부터)에서는 @Query의 반환 유형으로 프로젝션을 사용할 수 있음을 보여줍니다. 그래서 당신은 할 수 있습니다 :

    public interface ActionId {
        String getId(); 
    }
    
    @Query("select a.id as id from Action a where a.type = :type")
    public List<ActionId> findByType(@Param("type") String type);
    

    이제 생성자 표현식을 사용하지 않고 원하는 컬럼을 더 간결하게 선택하고 객체를 반환 할 수 있습니다. 투영을 도메인 객체 자체에 적용하면 id 필드만으로도 여전히 "액션"을 반환 할 수 있지만 그럴 가능성은 없습니다.

    ref : https : //github.com/spring-projects/spring-data-examples/blob/master/jpa/example/src/main/java/example/springdata/jpa/projections/CustomerRepository.java

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

    2.나는 당신이 "중첩 된 투영법"을 사용할 수 있다고 생각합니다.

    나는 당신이 "중첩 된 투영법"을 사용할 수 있다고 생각합니다.

    예 : 자원 A는 필드 boo와 자원 B를 포함하며, 필드 foo, bar, zed가 있습니다.

    원하는 필드 만 나열하는 B 용 투영을 작성해야합니다.

    @Projection(name="reduced", types = B.class)
    public interface BReduced {
        String foo;
        //exclude bar, for instance
        int zed;
    }
    

    그런 다음 A의 투영법에서 그 투영법을 사용합니다.

    @Projection(name="reduced", types = A.class)
    public interface AReduced {
        int bubi;
        BReduced b;
    }
    

    잘 이해했거나 SQL 쿼리에서 성능에 대해 이야기하고 있습니까?

  3. from https://stackoverflow.com/questions/26524529/modify-sql-query-generated-behind-spring-data-rest-projections by cc-by-sa and MIT license