JPA는 특정 데이터베이스에 종속적이지 않은 기술이다.
따라서 다른 데이터베이스로 손쉽게 교체할 수 있다.
그런데 각 데이터베이스가 제공하는 SQL 문법과 함수가 조금씩 다르다는 문제점이 있다.
예시 )
데이터 타입 : 가변 문자 타입으로 MySQL은 VARCHAR, 오라클은 VARCHAR2
다른 함수명 : 문자열을 자르는 함수로 SQL 표준은 SUBSTRING(), 오라클은 SUBSTR()
페이징 처리 : MySQL은 LIMIT 사용, 오라클은 ROWNUM
이렇듯 SQL 표준을 지키지 않거나, 특정 데이터베이스만의 고유한 기능을 JPA서는 방언(Dialet)이라 한다.
따라서 개발자가 특정 데이터베이스에 종속되는 기능을 많이 사용하면 나중에 데이터베이스를 교체하기가 어렵다.
그러나 하이버네이트를 초함한 대부분의 JPA 구현체들은 이런 문제를 해결하기 위해 다양한 데이터베이스 방언 클래스를 제공한다.
따라서 개발자는 JPA가 제공하는 표준 문법에 맞춰 JPA를 사용하면 되고,
특정 데이터베이스에 의존적인 SQL은 데이터베이스 방언이 처리해준다.
⌗ JPA Dialet 종류
H2 : org.hibernate.dialect.H2Dialect
Oracle 10g : org.hibernate.dialect.Oracle10gDialect
MySQL : org.hibernate.dialect.MySQL5InnoDBDialect
⌗ Hibernate 전용 속성
hibernate.show_sql : 하이버네이트가 실행한 SQL을 출력
hibernate.format_sql : 하이버네이트가 실행한 SQL을 출력할때 보기 쉽게 정렬
hibernate.use_sql_comments : 쿼리를 출력할때 주석도 함께 출력
hibernate.id.new_generator_mappings : JPA 표준에 맞춘 새로운 키 생성 전략을 사용
[참고]
Hibernate API : https://docs.jboss.org/hibernate/orm/current/javadocs/
Hibernate User Guid : https://docs.jboss.org/hibernate/orm/current/userguide/html_single/Hibernate_User_Guide.html
'Database > JPA' 카테고리의 다른 글
[JPA] 영속성 관리 : 매핑한 엔티티를 엔티티 매니저를 통해 엔티티의 생명 주기는 어떻게 사용되는가 (0) | 2020.08.10 |
---|---|
[JPA] 프로젝트에서 JPA 적용 방법 (0) | 2020.08.10 |
[JPA] 테이블과 매핑할 클래스 어노테이션 (0) | 2020.08.10 |
[JPA] 버전별 특징 (0) | 2020.08.10 |
[JPA] 객체와 테이블의 전격 비교 분석 (0) | 2020.08.10 |
[JPA] 그것은 무엇인가? (0) | 2020.08.06 |