본문 바로가기
JPA

[JPA] JPQL과 방언(Dialect)

by qoth_0 2024. 5. 27.
728x90
반응형

 

 

JPA는 복잡한 검색 조건을 사용해서 엔티티 객체를 조회할 수 있는 다양한 쿼리 기술을 지원함

ORM을 사용하면 데이터베이스 테이블이 아닌 엔티티 객체를 대상으로 개발하므로 검색도 엔티티 객체를 대상으로 하는 방법이 필요

 

JPQL(Java Persistence Query Language)

  • 테이블이 아닌 객체를 대상으로 검색하는 객체지향 쿼리
  • SQL을 추상화해서 특정 데이터베이스에 의존하지 않음

JPA는 JPQL을 분석하여 적절한 SQL을 만들어 데이터베이스를 조회

→ 조회한 결과로 엔티티 객체를 생성해서 반환

 

문제는 각각의 데이터베이스가 제공하는 SQL 문법과 함수는 조금씩 다르다는 것

 

JPQL 사용 시 데이터베이스 방언(Dialect)를 지정해서 사용

→ 선택한 방언에 따라 해당 데이터베이스에 맞춘 적절한 SQL함수가 실행됨

 

데이터베이스 방언

SQL 표준을 지키지 않는 특정 데이터베이스만의 고유한 기능

  • 가변 문자: VARCHAR(MySQL), VARCHAR2(Oracle)
  • 문자열을 자르는 함수: SUBSTRING(SQL 표준), SUBSTR( Oracle )
  • 페이징: LIMIT(MySQL), ROWNUM(Oracle)

이러한 차이를 방언(Dialect)라고 하며, JPA에서는 추상화된 방언 클래스를 제공

→ 데이터베이스 방언만 변경하면 JPQL을 수정하지 않아도 데이터베이스 변경 가능

 

 

방언 설정

application.yml(application.properties) 에서 설정

spring:
  jpa: 
    database-platform: org.hibernate.dialect.MariaDBDialect

 

 

Dialect는 보통 데이터베이스 이름 + 버전으로 되어 있음

  • H2: org.hibernate.dialect.H2Dialect
  • Oracle 10g: org.hibernate.dialect.Oracle10gDielect
  • MySQL: org.hibernate.dialect.MySQL5InnoDBDialect
  • MariaDB : org.hibernate.dialect.MariaDBDialect

 

그외 hibernate 방언: 

https://docs.jboss.org/hibernate/orm/5.2/javadocs/org/hibernate/dialect/package-summary.html

 

 

 

728x90
반응형

'JPA' 카테고리의 다른 글

[JPA] Fetch type, N+1 문제  (0) 2024.05.23
[JPA] 영속성 전이 : CASCADE  (0) 2024.05.23