Spring Data JPA는 Java Persistence API (JPA)를 기반으로 구현된 라이브러리입니다. 이를 사용하면 Java 객체와 관계형 데이터베이스 간의 매핑을 쉽게 할 수 있습니다.
Spring Data JPA는 JPQL (Java Persistence Query Language)을 지원합니다. 하지만 때로는 JPQL로는 해결하기 어려운 쿼리가 있습니다. 이럴 때는 네이티브 쿼리 (Native Query)를 사용할 수 있습니다. 네이티브 쿼리는 SQL 문법을 사용하여 데이터베이스와 상호작용할 수 있습니다.
Spring Data JPA에서 네이티브 쿼리를 사용하려면 다음과 같은 단계를 따르면 됩니다.
1. 엔티티 클래스에서 @SqlResultSetMapping 어노테이션을 사용하여 매핑 정보를 정의합니다. 이를 통해 네이티브 쿼리 결과를 엔티티 클래스와 매핑할 수 있습니다.
@SqlResultSetMapping(
name = "employeeResult",
classes = {
@ConstructorResult(
targetClass = Employee.class,
columns = {
@ColumnResult(name = "id", type = Long.class),
@ColumnResult(name = "name", type = String.class),
@ColumnResult(name = "age", type = Integer.class)
}
)
}
)
@Entity
public class Employee {
//...
}
Repository 인터페이스에 네이티브 쿼리를 정의합니다. @Query 어노테이션을 사용하고 nativeQuery 속성을 true로 설정합니다. 결과를 매핑할 @SqlResultSetMapping 이름을 지정합니다.
@Repository
public interface EmployeeRepository extends JpaRepository<Employee, Long> {
@Query(
value = "SELECT id, name, age FROM employee WHERE age > :age",
nativeQuery = true,
resultSetMapping = "employeeResult"
)
List<Employee> findEmployeesByAgeGreaterThan(int age);
}
위 예제에서 Employee 클래스는 @SqlResultSetMapping을 사용하여 네이티브 쿼리 결과를 매핑할 수 있도록 정의되었습니다. EmployeeRepository 인터페이스에서 @Query 어노테이션을 사용하여 네이티브 쿼리를 정의하고 resultSetMapping 속성에 employeeResult를 지정하여 결과를 매핑합니다.
이제 EmployeeRepository를 사용하여 findEmployeesByAgeGreaterThan 메서드를 호출하면 age보다 많은 나이를 가진 직원 목록을 반환하는 네이티브 쿼리가 실행됩니다.
List<Employee> employees = employeeRepository.findEmployeesByAgeGreaterThan(30);
'Database ( DB ) > JPA, Querydsl' 카테고리의 다른 글
JPA에서 like 사용하는 방법 (0) | 2023.04.03 |
---|---|
jpa + querydsl + sqlite 페이징 처리 방법 (0) | 2022.10.04 |
JPA에서 insert, update, delete 할 때 자동으로 select 하지 않게 하는 방법 (0) | 2022.09.11 |
jpa entity에 복합키 사용하는 방법 (0) | 2022.04.17 |
querydsl 5.0 - fetchResult, fetchCount deprecated (2) | 2022.04.17 |