JPQL_Java Persistence Query Language

wondi·2025년 1월 4일

JPQL이란?

  • JPA에서 사용하는 객체지향 쿼리언어
  • SQL과 비슷하지만, 데이터베이스 테이블이 아닌 JPA엔티티를 대상으로 쿼리를 작성
  • JPA는 JPQL을 SQL로 변환하여 데이터베이스에서 실행함

JPQL의 특징

  1. 엔티티 중심적이다.
  • JPQL은 데이터베이스 테이블 대신 JPA 엔티티 클래스와 그 필드를 대상으로 작동함
  • 테이블과 열 대신 엔티티와 속성을 사용함
SQL : select * from member

JPQL : select m from member m
  1. SQL과 비슷한 문법
  • select, update, delete 사용
  • group by, having, order by 지원
  • 집계함수 지원(count, sum, avg, min, max 등)
  1. 객체지향 특성
  • 엔티티 간의 연관관계(join)을 객체 필드를 사용하여 표현 가능
  • 네이티브 SQL보다 객체지향적인 쿼리 작성가능
  1. 데이터베이스와 연관성
  • JPQL은 특정 데이터베이스에 종속되지 않음(JPA가 적절한 SQL로 변환함)
JPQLSQL
엔티티와 속성을 대상으로 작동테이블과 컬럼을 대상으로 작동
객체지향적인 쿼리 작성 가능데이터 중심적 쿼리 작성
데이터베이스 독립적특정 데이터베이스 종속적
연관 관계를 객체 필드로 표현Join으로 테이블 연결 필요

JPQL 기본 문법

  1. select
String jpql = "SELECT m FROM Member m WHERE m.name = :name";
TypedQuery<Member> query = em.createQuery(jpql, Member.class);
query.setParameter("name", "HelloA");
List<Member> result = query.getResultList();
  1. 조건문
String jpql = "SELECT m FROM Member m WHERE m.age > 30 ORDER BY m.name ASC";
List<Member> result = em.createQuery(jpql, Member.class).getResultList();
  1. join
String jpql = "SELECT o FROM Order o JOIN o.member m WHERE m.name = :name";
TypedQuery<Order> query = em.createQuery(jpql, Order.class);
query.setParameter("name", "HelloA");
List<Order> result = query.getResultList();
  1. 집계함수
em.createQuery("UPDATE Member m SET m.name = :name WHERE m.id = :id")
    .setParameter("name", "UpdatedName")
    .setParameter("id", 1L)
    .executeUpdate();
  1. update & delete
em.createQuery("UPDATE Member m SET m.name = :name WHERE m.id = :id")
    .setParameter("name", "UpdatedName")
    .setParameter("id", 1L)
    .executeUpdate();

em.createQuery("DELETE FROM Member m WHERE m.id = :id")
    .setParameter("id", 1L)
    .executeUpdate();

JPQL의 실행흐름

  1. JPQL 작성
  2. JPA가 JPQL을 SQL로 변환
  3. 데이터베이스에서 SQL 실행
  4. 결과를 entity 객체로 매핑하여 변환

ORACLE로의 변환

MAVEN으로 실습중이며,
persistence.xml의

<property name="hibernate.dialect" value="org.hibernate.dialect.H2Dialect"/>

value의 dialect 를 Oracle12cDialect 로 변환하면 자동으로 hibernate가 oracle 문법으로 자동변환해준다.

profile
Developer Wondi

0개의 댓글