[Beyond SW] Native Query

이경민·5일 전

한화시스템 Beyond SW

목록 보기
35/40

Native query

SQL 쿼리를 그대로 사용하는 것
ORM(Object-Relational Mappping)의 기능을 이용하면서 SQL쿼리도 활용가능

  1. 결과 타입 정의 : public Query createNativeQuery(String sqlString, Class resultClass)
  2. 결과 타입을 정의할 수 없을 때 : public Query createNativeQuery(String sqlString)
  3. 결과 매핑 사용 : public Query createNativeQuery(String sqlString, String resultSetMapping)

자동 결과 매핑

네이티브 쿼리 결과를 JPA가 알아서 엔터티나 스칼라 값으로 “자동” 매핑하도록 설정해두는 것.ㅊ @SqlResultSetMapping 을 사용해 네이티브 쿼리의 결과를 매핑할 수 있다.
@SqlResultSetMapping 어노테이션은 네이티브 쿼리의 결과를 엔티티나 스칼라 값으로 매핑하기 위해 사용된다. 엔티티 매핑과 컬럼 매핑을 지정할 수 있으며, @EntityResult@ColumnResult 어노테이션을 이용해 매핑 정보를 추가한다.
컬럼명이 엔터티 필드와 일치할 때

@SqlResultSetMapping(
    name = "CategoryMenuCountMapping",
    entities = {
        @EntityResult(entityClass = Category.class)
    },
    columns = {
        @ColumnResult(name = "menu_count", type = Long.class)
    }
)

수동 결과 매핑

엔터티의 필드 하나하나 “직접” 컬럼과 매핑시켜주는 방식. @EntityResult 내에 @FieldResult 어노테이션을 이용해서 @Column 어노테이션 대신 엔티티의 필드에 매핑을 설정할 수 도 있다

@SqlResultSetMapping(
    name = "CategoryManualMapping",
    entities = {
        @EntityResult(
            entityClass = Category.class,
            fields = {
                @FieldResult(name = "categoryCode", column = "cat_code"),
                @FieldResult(name = "categoryName", column = "cat_name")
            }
        )
    }
)

0개의 댓글