persistence.xml 설정
- JPA는 persistence.xml을 사용해서 필요한 설정 정보를 관리
- META-INF/persistence.xml 클래스 패스 경로에 있으면 별도 설정없이 JPA 인식
JPA 환경설정 파일 persistence.xml
<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://xmlns.jcp.org/xml/ns/persistence" version="2.1">
<persistence-unit name="jpabook">
<properties>
<!-- 필수 속성 -->
<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"/>
<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.id.new_generator_mappings" value="true" />
<!--<property name="hibernate.hbm2ddl.auto" value="create" />-->
</properties>
</persistence-unit>
</persistence>
설정 파일은 <persistence>로 시작
<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://xmlns.jcp.org/xml/ns/persistence" version="2.1">
JPA 설정은 영속성 유닛(persistence-unit)으로 시작
- 일반적으로 연결할 데이타베이스 하나당 영속성 유닛 등록
- 고유한 이름을 부여, 여기서는 jpabook
<persistence-unit name="jpabook">
사용한 속성
- JPA 표준 속성
- javax.persistence.jdbc.driver : JDBC 드라이버
- javax.persistence.jdbc.user : 데이터베이스 접속 아이디
- javax.persistence.jdbc.password : 데이터베이스 접속 비밀번호
- javax.persistence.jdbc.url : 데이터베이스 접속 URL
- 하이버네이트 설정
- hibernate.dialect : 데이터베이스 방언 설정
데이터베이스 방언
JPA는 특정 데이터베이스에 종속적이지 않은 기술.
다른 데이터베이스로 손쉽게 교체할 수 있다.
데이터베이스마다 차이점
- 데이터 타입
- 다른 함수명
- 페이징 처리
SQL 표준을 지키지 않거나 특정 데이터베이스만의 고유한 기능을 JPA에서는 "Dialect(방언)"이라고 한다.
하이버네이트 설정 옵션
옵션
- hibernate.show_sql : 실행한 SQL을 출력.
- hibernate.format_sql : SQL을 보기 좋게 정렬함.
- hibernate.use_sql_comments : 쿼리 출력 시 주석도 함께 출력
- hibernate.id.new_generator_mappings : JPA 표준에 맞는 새로운 키 생성 전략을 사용함.
하이버네이트 설정
- create : Session factory가 실행될 때에 스키마를 지우고 다시 생성. 클래스패스에 import.sql 이 존재하면 찾아서, 해당 SQL도 함께 실행함.
- create-drop : create와 같지만 session factory가 내려갈 때 스키마 삭제.
- update : 시작시, 도메인과 스키마 비교하여 필요한 컬럼 추가 등의 작업 실행. 데이터는 삭제하지 않음.
validate : Session factory 실행시 스키마가 적합한지 검사함. 문제가 있으면 예외 발생.
개발시에는 create가, 운영시에는 auto 설정을 빼거나 validate 정도로 두는 것이 좋아 보인다. update로 둘 경우에, 개발자들의 스키마가 마구 꼬여서 결국은 drop 해서 새로 만들어야 하는 사태가 발생한다.