🧩 HQL

정의

HQLHibernate Query Language의 약어로, Hibernate에서 사용하는 객체 지향 쿼리 언어이다. 테이블이 아니라 엔티티와 속성을 기준으로 쿼리를 작성한다.

SQL과 비슷하지만 객체 모델 중심으로 동작한다.

🧩 역할

  • 엔티티와 필드를 기준으로 쿼리를 작성한다
  • 상속, 다형성, 연관관계를 활용할 수 있다
  • 객체 중심의 조회와 수정 쿼리를 작성한다
  • Hibernate 내부 쿼리 처리에 사용된다

🛠 특징

  • SQL과 문법이 유사하지만 테이블 이름 대신 엔티티 이름을 사용한다
  • 쿼리 결과를 객체로 받는 데 적합하다
  • 상속 관계와 연관 관계를 자연스럽게 다룰 수 있다
  • 대소문자는 클래스명과 속성명 기준으로 주의해서 작성해야 한다

🛠 사용 예시

조회

List<User> users = entityManager
        .createQuery("SELECT u FROM User u WHERE u.status = 'ACTIVE'", User.class)
        .getResultList();

수정

@Modifying
@Query("UPDATE User u SET u.userName = :newUserName WHERE u.email = :email")
int updateUserNameByEmail(@Param("newUserName") String newUserName,
                          @Param("email") String email);

⚠️ 주의사항

  • HQL은 Hibernate 전용 쿼리 언어다.
  • 테이블 이름이 아니라 엔티티 이름을 사용해야 한다.
  • DB 고유 SQL과는 문법이 다를 수 있다.
  • UPDATE, DELETE에는 @Modifying과 함께 쓰는 경우가 많다.
  • JPQL과 매우 비슷하지만 Hibernate 기능에 더 가깝다.

📌 정리

  • HQL은 Hibernate가 제공하는 객체 지향 쿼리 언어다.
  • 엔티티와 속성 중심으로 작성한다.
  • JPQL과 비슷하지만 Hibernate 전용 기능이라는 점을 기억하면 좋다.

연결문서

댓글남기기