[Spring JPA] @NamedNativeQuery 와 @SqlResultSetMapping 세팅시 주의사항

갓김치·2024년 6월 14일
0

Spring Data JPA

목록 보기
2/2

native query의 alias를 camel case로 작성

SELECT p.member_id as patientId // camel case로 alias
FROM patient
public record DataHistoryHoursMapping(Integer patientId, Integer hours) {

}
  • SqlResultSetMapping의 클래스 변수명과 일치시켜야 한다. native query에 snake case로 alias 하면 아래와 같은 오류 나옴
    • org.springframework.orm.jpa.JpaSystemException: Could not resolve column name in result set [patientId];

@SqlResultSetMapping의 컬럼 타입을 클래스 타입과 같게 작성

// entity
@SqlResultSetMapping(
    name = "DataHistoryHoursMapping",
    classes = @ConstructorResult(
        targetClass = DataHistoryHoursMapping.class,
        columns = {
            @ColumnResult(name = "patientId", type = Integer.class), // record와 일치하는지 확인
            @ColumnResult(name = "hours", type = Integer.class) // record와 일치하는지 확인
        }
    )
)

// mapping record
public record DataHistoryHoursMapping(Integer patientId, Integer hours) {

}
  • 일치하지 않으면 다음과 같은 오류가 발생함.
    • org.springframework.dao.InvalidDataAccessApiUsageException: Could not locate appropriate constructor on class

@SqlResultSetMapping 컬럼 순서와 DTO 변수 순서 매칭

profile
갈 길이 멀다

0개의 댓글