<persistence-unit name="hello">
<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.jdbc.batch_size" value="10" />
<property name="hibernate.hbm2ddl.auto" value="none" />
</properties>
</persistence-unit>
- JPA 설정 파일은 반드시
/META-INF/persistence.xml
로 설정 - persistence-unit : JAP 이름을 지정한다. 데이터베이스 하나 당 설정.
- JPA는
dialect
를 통해 각 데이터베이스만의 SQL을 생성하므로 특정 데이터베이스에 종속되지 않는다.- MySQL이나 Oracle은 문법과 함수가 조금씩 다르다. (데이터베이스 방언)
- 하이버네이트는 40가지 이상의 데이터베이스 방언을 지원한다. hibernate.dialect 속성에 지정한다.
- Oracle 10g : org.hibernate.dialect.Oracle10gDialect
- MySQL : org.hibernate.dialect.MySQL5InnoDBDialect
- H2 : org.hibernate.dialect.H2Dialect
- hibernate.show_sql : 실행되는 쿼리를 로그로 보여줌
- hibernate.format_sql : 쿼리를 이쁘게 정렬시킴
- hibernate.use_sql_comments : 어떤 쿼리인지 쿼리 위에 주석으로 나타냄
- hibernate.jdbc.batch_size : 트랜잭션을 지원하는 쓰기 지연 SQL 저장소 사이즈
- hibernate.hbm2ddl.auto
- 애플리케이션 실행 시점에 데이터베이스 스키마를 자동 생성해주는 설정
- 데이터베이스 방언에 맞는 적절한 DDL을 생성한다.
- 생성된 DDL은 로컬, 개발 환경에서만 사용하고 운영에서는 사용하지 않거나 적절히 다듬은 후 사용하자!
create
: 기존 테이블을 drop 후 다시 createcreate-drop
: create와 같으나 종료 시점에 테이블을 dropupdate
: 변경 부분만 반영한다. 예를 들어, 필드가 새로 추가되었을 때 update 옵션으로 설정 후 애플리케이션을 실행하면 alter 문으로 컬럼이 추가된다. 단, 필드 삭제 후 재가동하면 컬럼 삭제가 되지는 않는다.validate
: 엔티티와 테이블이 정상 매핑되었는지만 확인none
: 이 설정을 사용하지 않는다. 주석 처리한 것과 같다.- 로컬 환경에서만 create나 update를 사용해도 되고, 테스트 서버에서는 update나 validate를 사용해도 된다. 운영 장비에서는 절대 create, create-drop, update를 사용해서는 안 된다!
- JPA 구현체를 하이버네이트 말고 다른 걸로 변경할 때
- property name이 javax.persistence로 시작하는 것은 JPA 표준 속성이기 때문에 그대로 사용해도 된다.
- hibernate로 시작하는 것은 하이버네이트 자체에서 사용하는 것이므로 변경한 구현체 전용을 사용해야 한다.