김영한님의 자바 ORM 표준 JPA 프로그래밍 - 기본편 정리
jpa-basicex1-hello-jpa1.0.0<dependencies>
<!-- JPA 구현체: Hibernate -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
<version>5.3.10.Final</version>
</dependency>
<!-- H2 Database -->
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<version>1.4.199</version>
</dependency>
</dependencies>
./h2.shh2.batjdbc:h2:tcp://localhost/~/test주의: 최초 파일 생성 시
jdbc:h2:~/test로 접속 후, 파일 생성 이후부터는tcp모드(jdbc:h2:tcp://localhost/~/test)로 접속해야 한다.
/src/main/resources/META-INF/persistence.xml<persistence version="2.2"
xmlns="http://xmlns.jcp.org/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_2.xsd">
<persistence-unit name="hello">
<properties>
<!-- DB 연결 설정 -->
<property name="javax.persistence.jdbc.driver" value="org.h2.Driver"/>
<property name="javax.persistence.jdbc.user" value="sa"/>
<property name="javax.persistence.jdbc.password" value=""/>
<property name="javax.persistence.jdbc.url" value="jdbc:h2:tcp://localhost/~/test"/>
<!-- Hibernate 설정 -->
<property name="hibernate.dialect" value="org.hibernate.dialect.H2Dialect"/>
<property name="hibernate.show_sql" value="true"/>
<property name="hibernate.format_sql" value="true"/>
<property name="hibernate.use_sql_comments" value="true"/>
<!-- 스키마 자동 생성 옵션 (개발 단계에서만 사용) -->
<!-- <property name="hibernate.hbm2ddl.auto" value="create"/> -->
</properties>
</persistence-unit>
</persistence>
JPA는 DB 독립성을 지향합니다. 그러나 실제로는 DBMS마다 SQL 문법, 함수, 페이징 처리 등에서 차이가 있습니다. 이 차이를 해결하기 위해 방언(Dialect) 개념을 도입했습니다.
| DBMS | Dialect 설정 |
|---|---|
| H2 | org.hibernate.dialect.H2Dialect |
| MySQL | org.hibernate.dialect.MySQL5InnoDBDialect |
| Oracle 10g | org.hibernate.dialect.Oracle10gDialect |
예시
VARCHARVARCHAR2LIMIT, Oracle은 ROWNUMJPA는 방언 설정을 통해 이런 차이를 내부적으로 자동 변환해줍니다.
변경 예시
| 기존(javax) | 변경(jakarta) |
|---|---|
javax.persistence.Entity | jakarta.persistence.Entity |
javax.persistence.Table | jakarta.persistence.Table |
따라서 최신 프로젝트를 할 때는 라이브러리 버전과 네임스페이스에 특히 주의해야 합니다.