네이티브 쿼리를 사용하여 스프링 데이터에서 사용자 지정 개체 반환
제 질문은 다른 게시물을 기반으로 합니다.네이티브 쿼리로 동일한 작업을 수행하려면 어떻게 해야 합니까?네이티브 쿼리는 JPQL을 허용하지 않으므로 새 인스턴스도 허용하지 않습니다.
나의 뽀조.
class Coordinates {
private final BigDecimal latitude
private final BigDecimal longitude
...
}
내 데이터베이스 테이블에는 도시 둘레에 대한 좌표가 포함되어 있으므로 city_name, 위도, 경도의 세 개 열이 있습니다.각 도시에는 Google 지도에서 그림자 영역을 만드는 데 사용될 많은 주변 좌표(실제로 LOTS)가 포함되어 있습니다.
좌표 목록을 반환하는 간단한 네이티브 쿼리를 테이블에 작성하려고 합니다.
다른 게시물에서 답을 찾았습니다.기본적으로 사용했습니다.SqlResultSetMapping
와 함께ConstructorResult
(다른 방법은 없습니다) 언급된 게시물의 수락된 답변에 대한 댓글에 특별한 주의를 기울이며: 당신은 다음을 추가할 필요가 있습니다.@NamedNativeQuery
사용된 개체에 대한 주석interface
그리고 엔티티 이름 앞에 다음을 추가합니다..
그렇지 않으면 작동하지 않을 것입니다.
예:
@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 {
이것은 https://jira.spring.io/browse/DATAJPA-980 이며, 이 문제를 보여주는 프로젝트입니다.
@Query(value = "SELECT name AS name, age AS age FROM Person", nativeQuery = true)
List<PersonSummary> findAllProjectedNativeQuery();
Hibernate 5.2.11과 함께 제공되는 Spring Data JPA 2.0 GA(Kay) 릴리스에서 수정되었습니다.
Spring Data 1.10.12(Ingalls) 및 1.11.8(Hopper)에서도 이 문제가 해결되었지만 작동하려면 Hibernate 5.2.11에서 실행해야 합니다.
당신은 JPA의 일부인 sql 결과 집합 매핑을 사용해야 합니다.
최신 버전을 사용하는 경우spring-data
그리고 또한 그것을 이용합니다.Repositories
저는 개인적으로 이탈라스의 대답이 올바른 해결책으로 이어진다고 생각합니다.
사실 지금은 (Spring Data)에 대해 몰랐습니다.Projections
하지만 그가 그의 예에서 보여주고 있는 것을 이해할 시간이 필요했습니다.
따라서 링크를 추가하고 싶습니다.Spring Data JPA - Reference Documentation
투영 챕터를 살펴봅니다.
Spring Data 쿼리 메서드는 일반적으로 리포지토리에서 관리하는 집계 루트의 인스턴스를 하나 이상 반환합니다.그러나 이러한 유형의 특정 속성을 기반으로 투영을 작성하는 것이 바람직할 수 있습니다.Spring Data를 사용하면 전용 반환 유형을 모델링하여 관리되는 Aggregate의 부분 뷰를 보다 선택적으로 검색할 수 있습니다.
내가 찾은 답은:
public interface UserEventRepository extends JpaRepository<UserEvent, Long> {
List<UserEvent> findAllByUserId(Long userId);
@Query(value = "SELECT user_id FROM user_event ue " +
"WHERE ue.user_id = :userId", nativeQuery = true)
List<Long> findUserIdByEventId(@Param("userId") Long userId);
}
그러면 List of Long - list of ids를 반환합니다.여기서 핵심은 nativeQuery 속성을 true로 설정하고 있다는 것입니다.값 자체가 실행할 쿼리입니다.
그게 도움이 되길 바랍니다.그것은 분명한 해결책인 것 같습니다.
프로젝션 솔루션이 최고였습니다.(예를 들어 ID로 쿼리하면 확장 CRUD 작업을 사용할 수 있습니다.)
쿼리에 대한 응답으로 인터페이스를 다음과 같이 추가합니다.
리포지토리 예제:
@Query(select * from tableA where tableA = :id)
DisplayLangLongI findTableAbyId(@Param(value = "id") Long id)
예제 인터페이스(DisplayLangLongI.java)
public interface DisplayLangLongI () {
BigDecimal getLatitude();
BigDecimal getLongitude();
...... (you can add more)
}
인터페이스에서 표시할 파라미터/객체를 선택할 수 있습니다.
언급URL : https://stackoverflow.com/questions/42893870/return-custom-object-from-spring-data-with-native-query
'source' 카테고리의 다른 글
Python이 return_value 대신 MagicMock 개체를 반환합니다. (0) | 2023.07.18 |
---|---|
Pymongo를 사용하여 Mongodb의 연결 시간 제한을 설정하는 방법은 무엇입니까? (0) | 2023.07.18 |
Python: 목록 요소 간의 차이점 찾기 (0) | 2023.04.24 |
.net core 2.0에서 x-powered-by 헤더를 삭제하는 방법 (0) | 2023.04.24 |
iPad 멀티태스킹 지원에는 다음과 같은 방향성이 필요합니다. (0) | 2023.04.24 |