Native Query

Native Query는 JPA에서 SQL을 직접 사용하는 방식입니다.

쉽게 말하면

JPQL이 아니라 진짜 SQL을 그대로 쓰는 거예요.

JPQL vs Native Query

JPQL (엔티티 대상)

String jpql = "SELECT u FROM User u WHERE u.name = :name";

Native Query (테이블 대상)

String sql = "SELECT * FROM users WHERE name = ?";

사용 예시

// Native Query 사용
String sql = "SELECT * FROM users WHERE name = ?";
List<User> users = entityManager
    .createNativeQuery(sql, User.class)
    .setParameter(1, "홍길동")
    .getResultList();

Spring Data JPA에서

public interface UserRepository extends JpaRepository<User, Long> {

    // JPQL
    @Query("SELECT u FROM User u WHERE u.name = :name")
    List<User> findByNameJPQL(@Param("name") String name);

    // Native Query
    @Query(value = "SELECT * FROM users WHERE name = :name", nativeQuery = true)
    List<User> findByNameNative(@Param("name") String name);
}

언제 사용하나?

상황추천
일반적인 CRUDJPQL 또는 메서드 쿼리
DB 고유 기능 사용Native Query
복잡한 통계/집계Native Query
성능 최적화 필요Native Query
// 예: MySQL 전용 함수 사용
@Query(value = "SELECT * FROM users WHERE MATCH(name) AGAINST(:keyword)",
       nativeQuery = true)
List<User> fullTextSearch(@Param("keyword") String keyword);

장단점

구분JPQLNative Query
DB 독립성유지됨X DB 종속
엔티티 매핑자동직접 설정 필요할 수 있음
DB 고유 기능X 제한적모두 사용 가능
성능 최적화제한적세밀한 튜닝 가능

한줄 요약

Native Query = JPA에서 SQL을 직접 사용하는 방법 (DB 고유 기능이나 복잡한 쿼리가 필요할 때 사용)

CSLOG에서 보기