복붙노트

[SPRING] 네이티브 쿼리를 사용하여 스프링 데이터에서 사용자 정의 객체 반환

SPRING

네이티브 쿼리를 사용하여 스프링 데이터에서 사용자 정의 객체 반환

내 질문은 다른 게시물을 기반으로합니다. 네이티브 쿼리로 어떻게 동일한 결과를 얻을 수 있습니까? 네이티브 쿼리는 JPQL을 허용하지 않으므로 새 인스턴스도 허용되지 않습니다.

내 POJO.

class Coordinates {

    private final BigDecimal latitude
    private final BigDecimal longitude

    ...
}

내 데이터베이스 테이블에는 도시 둘레에 대한 좌표가 포함되어 있으므로 city_name, latitude, longitude라는 세 개의 열이 있습니다. 각 도시에는 Google지도에서 그림자 영역을 만드는 데 사용할 주변 좌표가 많이 (실제로는 LOTS) 있습니다.

좌표 목록을 반환해야하는 테이블에 대한 간단한 네이티브 쿼리를 작성하려고합니다.

해결법

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

    1.다른 게시물에 대한 답을 찾았습니다. 기본적으로 ConstructorResult와 함께 SqlResultSetMapping을 사용했습니다 (다른 방법은 없습니다). 언급 된 게시물의 대답에 대한 주석에 특별한주의를 기울였습니다. @NamedNativeQuery 주석을 사용한 인터페이스의 엔터티에 추가하고 엔터티의 이름을 앞에 추가해야합니다. 와. 그렇지 않으면 작동하지 않습니다.

    다른 게시물에 대한 답을 찾았습니다. 기본적으로 ConstructorResult와 함께 SqlResultSetMapping을 사용했습니다 (다른 방법은 없습니다). 언급 된 게시물의 대답에 대한 주석에 특별한주의를 기울였습니다. @NamedNativeQuery 주석을 사용한 인터페이스의 엔터티에 추가하고 엔터티의 이름을 앞에 추가해야합니다. 와. 그렇지 않으면 작동하지 않습니다.

    예:

    @Entity
    @Table(name = "grupo_setorial")
    @SqlResultSetMapping(
            name = "mapeamentoDeQuadrantes",
            classes = {
                    @ConstructorResult(
                            targetClass = Coordenada.class,
                            columns = {
                                    @ColumnResult(name = "latitude"),
                                    @ColumnResult(name = "longitude")
                            }
                    )
            }
    )
    @NamedNativeQuery(
            name = "GrupoCensitario.obterPerimetroDosSetores",
            query = "SELECT latitude as latitude, longitude as longitude FROM coordenadas where id_setor IN (:setores)",
            resultSetMapping = "mapeamentoDeQuadrantes"
    )
    public class GrupoCensitario {
    
  2. ==============================

    2.JPA의 일부인 SQL 결과 세트 맵핑을 사용해야합니다.

    JPA의 일부인 SQL 결과 세트 맵핑을 사용해야합니다.

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

    3.이것은 https://jira.spring.io/browse/DATAJPA-980이며 여기에 문제를 보여주는 프로젝트가 있습니다.

    이것은 https://jira.spring.io/browse/DATAJPA-980이며 여기에 문제를 보여주는 프로젝트가 있습니다.

    @Query(value = "SELECT name AS name, age AS age FROM Person", nativeQuery = true)
    List<PersonSummary> findAllProjectedNativeQuery();
    

    Spring Data JPA 2.0 GA (Kay) 릴리즈에서 수정되었으며, 이는 Hibernate 5.2.11에 포함되어있다.

    이 문제는 스프링 데이터 1.10.12 (Ingalls)와 1.11.8 (Hopper)에서도 수정되었지만 작동하려면 Hibernate 5.2.11에서 실행해야합니다.

  4. ==============================

    4.최신 버전의 스프링 데이터를 사용하고 리포지토리를 사용하고 있다면 필자는 Itsallas의 대답이 올바른 솔루션으로 이어질 것이라고 개인적으로 생각합니다.

    최신 버전의 스프링 데이터를 사용하고 리포지토리를 사용하고 있다면 필자는 Itsallas의 대답이 올바른 솔루션으로 이어질 것이라고 개인적으로 생각합니다.

    나는 실제로 (스프링 데이터) 투영에 대해서는 아직 안 했으므로 그의 예에서 그가 보여 주었던 것을 이해할 시간이 필요했습니다.

    따라서 Spring Data JPA - Reference Documentation에 대한 링크를 추가하고 싶다면 Projections 장을보십시오.

  5. from https://stackoverflow.com/questions/42893870/return-custom-object-from-spring-data-with-native-query by cc-by-sa and MIT license