복붙노트

[SPRING] SqlResultSetMapping 및 기본 쿼리와 JPA 데이터 저장소

SPRING

SqlResultSetMapping 및 기본 쿼리와 JPA 데이터 저장소

나는 다음과 같은 상황에 갇혀 있었다 :

나의 실체는하지만 난 JPQL을 사용하지 수있는 방식으로, 서로 관련이 있습니다. 나는 네이티브 SQL을 사용하도록 강요했다. 지금은 ValueObject 이러한 결과를 매핑 할. 명확하게하기 위해, 내가 개체 배열의 목록을 싶지 않아 (목록 <[] 객체>). 나는 일부 열을 필요가있는 6 개체가 있습니다. 아무도 나에게 네이티브 쿼리와 같은 매핑을 구현하는 방법에 대한 예를 들어 줄 수 있습니까?

내가 겪은 튜토리얼.

내 코드 :

@SqlResultSetMapping(
    name = "findAllDataMapping",
    classes = @ConstructorResult(
            targetClass = MyVO.class,
            columns = {
                    @ColumnResult(name = "userFirstName"),
                    @ColumnResult(name = "userLastName"),
                    @ColumnResult(name = "id"),
                    @ColumnResult(name = "packageName")
            }
    )
)

@NamedNativeQuery(name = "findAllDataMapping",
    query = "SELECT " +
            "    u.first_name as userFirstName, " +
            "    u.last_name as userLastName, " +
            "    i.id as id, " +
            "    s.title as packageName, " +
            "FROM " +
            "    invoice as i " +
            "JOIN user as u on i.user_id=u.id " +
            "LEFT JOIN subscription_package as s on i.subscription_package_id=s.id " +
            "where  u.param1=:param1 and i.param2=:param2" +
)

public class MyVO {
    private String userFirstName;
    private String userLastName;
    private Long id;
    private String packageName;

    public MyVO (String userFName, String userLName,
            Long id, String packageName) {
        this.userFirstName = userFName;
        this.userLastName = userLName;
        this.id = id;
        this.packageName = packageName;
    }

    // getters & setters
}

내 JPA-저장소 모듈에서 :

public interface MyRepository extends JpaRepository<MyEntity, Long> {
    List<MyVO> findAllOfMyVO(@Param("param1") String param1, @Param("param2") String param2);
}

요점은 내가 이런 종류의 매핑을 사용할 수 있도록 이러한 주석을 넣을 위치를 알 수 없다는 것입니다. 기본 쿼리에서 나는 새로운 rs.rado.leo.mypackage.MyVO (...)를 사용할 수 없습니다. 나는 다음과 같은 오류가 발생했습니다 :

에 의해 발생 :

org.springframework.data.mapping.PropertyReferenceException: No property findAllOfMyVO found for type MyEntity!

내 질문은 분명하다 것으로 가정합니다. 그렇지 않은 경우, 내가 내 질문을 편집 할 수 있도록 알려 주시기 바랍니다.

사전에 감사합니다!

해결법

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

    1.누락 된 resultClass를 추가

    누락 된 resultClass를 추가

    @NamedNativeQuery(name = "findAllDataMapping", resultClass = Entity.class, query="sql")
    

    또는

    @NamedNativeQuery(name = "findAllDataMapping", resultClass = MyVO.class, resultSetMapping ="findAllDataMapping" query = "sql")
    

    그리고 마지막으로 저장소에 쿼리를 호출

    @Query(nativeQuery = true, name = "findAllDataMapping")
    List<MyVO> findAllOfMyVO(@Param("param1") String param1, @Param("param2") String param2);
    
  2. ==============================

    2.당신은 쿼리와 쿼리를 표시해야합니다 :) 그것은 당신이 당신의 resulsts가 매핑 한 기업이기 때문에 그리고 당신은 대신 MyEntity의 MyVO를 사용할 필요가

    당신은 쿼리와 쿼리를 표시해야합니다 :) 그것은 당신이 당신의 resulsts가 매핑 한 기업이기 때문에 그리고 당신은 대신 MyEntity의 MyVO를 사용할 필요가

    @Repository
    public interface MyRepository extends JpaRepository<MyVO, Long> {
    
        @Query(nativeQuery = true)
        List<MyVO> findAllOfMyVO(@Param("param1") String param1, @Param("param2") String param2);
    }
    
  3. ==============================

    3.당신은 거의가 있지만 아래 부품

    당신은 거의가 있지만 아래 부품

    희망이 도움이.

  4. from https://stackoverflow.com/questions/46171583/jpa-data-repositories-with-sqlresultsetmapping-and-native-queries by cc-by-sa and MIT license