본문 바로가기

Spring/JPA

JPA 설정

persistence.xml 파일로 JPA 환경 설정 및 관리

 

<?xml version="1.0" encoding="UTF-8"?>
<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="ch04">
		<class>sky.spring.domain.Board</class>
		<properties>
			<!-- 데이터 소스 설정 -->
			<property name="javax.persistence.jdbc.driver" value="oracle.jdbc.driver.OracleDriver"/> 
			<property name="javax.persistence.jdbc.user" value="douzone"/>
			<property name="javax.persistence.jdbc.password" value="oracle"/>
			<property name="javax.persistence.jdbc.url" value="jdbc:oracle:thin:@localhost:1521:XE"/>
			<property name="hibernate.dialect" value="org.hibernate.dialect.Oracle12cDialect"/>
			<!-- 옵션 -->
			<property name="hibernate.show_sql" value="true"/>
			<property name="hibernate.format_sql" value="true"/>
			<property name="hibernate.use_sql_comments" value="false"/>
			<property name="hibernate.id.new_generator_mappings" value="true"/>
			<property name="hibernate.hbm2ddl.auto" value="none"/>
		</properties>
	</persistence-unit>
</persistence>

 

 

1. 영속성 유닛 이름

<!-- persistence.xml - persistence Unit 설정 -->
< persistence-unit name = "{영속성 유닛 이름}"></persistence-unit>


// Java 소스
EntityManagerFactory factory = Persistence.createEntityManagerFactory("{영속성 유닛 이름}");
EntityManager manager = factory.createEntityManager();

persistence.xml 파일의 루트는 <persistence>

<persistence>는 영속성 유닛에 해당하는 <persistence-unit> 엘리먼트를 가짐(영속성 유닛은 연동하려는 데이터베이스 당 하나씩 설정)

영속성 유닛을 설정하면 어플리케이션에서는 영속성 유닛 설정을 로딩해서 EntityManagerFactory를 생성함

어플리케이션에서 JPA를 이용하기 위해서는 EntityManager 객체가 필요한데 EntityManager 객체는 EntityManagerFactory로부터 얻어냄

 

 

2. 엔티티 클래스 등록

영속성 유닛 설정에서 가장 먼저 등록되는 정보는 엔티티 클래스 목록

엔티티 클래스는 클래스를 만드는 순간 자동으로 persistence.xml 파일에 등록됨(자동 등록 안될 시 직접 등록하면 됨)

cf) 스프링 프레임워크를 연동해서 JPA를 사용한다면 @Entity 어노테이션이 붙은 엔티티들을 자동으로 스캔해서 처리하기 때문에 엔티티 클래스를 명시적으로 등록하지 않아도 됨

 

 

3. 데이터 소스 설정

JPA 구현체는 데이터 소스 설정을 참조해서 특정 데이터베이스 커넥션을 연결

 

<!-- 데이터 소스 설정 -->

<!-- JDBC 드라이버 클래스 -->
<property name="javax.persistence.jdbc.driver" value="oracle.jdbc.driver.OracleDriver"/> 
<!-- 데이터베이스 접속 아이디 -->
<property name="javax.persistence.jdbc.user" value="douzone"/>
<!-- 데이터베이스 접속 패스워드 -->
<property name="javax.persistence.jdbc.password" value="oracle"/>
<!-- JDBC URL 정보 -->
<property name="javax.persistence.jdbc.url" value="jdbc:oracle:thin:@localhost:1521:XE"/>

 

 

4. Dialect 클래스 설정

JPA는 데이터베이스 연동에 필요한 SQL 구문을 자동으로 생성함(데이터베이스에 따라 키 생성 방식, 지원 함수가 다르다는 문제점 발생)

특정 데이터베이스에 최적화된 SQL을 생성하는데 어떤 Dialect가 설정되느냐에 따라서 생성되는 SQL이 달라짐

JPA가 지원하는 Dialect 클래스

데이터베이스 Dialect 클래스
DB2
org.hibernate.dialect.DB2Dialect
PostgreSQL
org.hibernate.dialect.PostgreSQLDialect
MySQL
org.hibernate.dialect.MySQLDialect
Oracle
org.hibernate.dialect.OracleDialect
Sybase org.hibernate.dialect.SybaseDialect
Microsoft SQL Server org.hibernate.dialect.SQLServerDialectDialect
SAP DB org.hibernate.dialect.SAPDBDialect
H2 org.hibernate.dialect.H2Dialect
<!-- Dialect 클래스 설정 -->
<property name="hibernate.dialect" value="org.hibernate.dialect.Oracle12cDialect"/>

 

 

5. JPA 구현체 설정

JPA 사용 시 실질적 기능을 제공할 JPA 구현체에 대한 설정

 

<!-- 생성된 SQL을 콘솔에 출력 -->
<property name="hibernate.show_sql" value="true"/>
<!-- SQL 출력 시 일정한 포맷으로 출력 -->
<property name="hibernate.format_sql" value="true"/>
<!-- SQL에 포함된 주석 출력 -->
<property name="hibernate.use_sql_comments" value="false"/>
<!-- 새로운 키 생성 전략 사용 -->
<property name="hibernate.id.new_generator_mappings" value="true"/>
<!-- 테이블 생성/수정/삭제 같은 DDL 구문을 자동으로 처리할지 지정 -->
<property name="hibernate.hbm2ddl.auto" value="none"/>

 

hibernate.hbm2ddl.auto 속성

속성값 의미
create 어플리케이션 실행 시 기존 테이블을 삭제하고 엔티티 클래스에 설정된 새로운 테이블 설정(DROP -> CREATE)
create-drop create와 기본적으로 같지만 어플리케이션이 종료되기 직전에 생성된 테이블 삭제(DROP -> CREATE -> DROP)
update or none 기존에 사용중인 테이블이 있는 경우 새 테이블 생성하지 않고 기존 테이블 재사용
엔티티 클래스의 매핑 설정이 변경되면 변경된 내용을 반영함(ALTER)