@Subselect란?

Hibernate에서 Inline View를 엔티티처럼 사용할 수 있도록 지원하는 어노테이션이다.

@Subselect를 활용하면 데이터베이스 테이블을 변경하지 않고도 복잡한 쿼리를 엔티티로 매핑할 수 있다.
특히 Querydsl 및 Hibernate 환경에서 FROM 절의 Inline View가 필요한 경우 사용된다.

사용법

1️⃣ @Subselect 적용 예제

import org.hibernate.annotations.Immutable;
import org.hibernate.annotations.Subselect;

import javax.persistence.Entity;
import javax.persistence.Id;

@Entity
@Immutable // 엔티티는 읽기 전용
@Subselect(
    "SELECT e.id AS id, e.name AS name, COUNT(o.id) AS order_count " +
    "FROM employee e " +
    "LEFT JOIN orders o ON e.id = o.employee_id " +
    "GROUP BY e.id, e.name"
)
public class EmployeeOrderSummary {

    @Id
    private Long id;
    private String name;
    private Long orderCount;
}

장점과 단점

✅ 장점

  • 데이터베이스 테이블을 변경하지 않고도 엔티티 매핑 가능
  • 복잡한 쿼리를 엔티티처럼 활용하여 코드 가독성 향상
  • Querydsl 및 Hibernate 환경에서 활용 가능

❌ 단점

  • 읽기 전용 엔티티이므로 데이터 변경 불가능
  • JPA 표준이 아니므로 Hibernate에 종속됨

연결문서

댓글남기기