<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 후 다시 create
    • create-drop : create와 같으나 종료 시점에 테이블을 drop
    • update : 변경 부분만 반영한다. 예를 들어, 필드가 새로 추가되었을 때 update 옵션으로 설정 후 애플리케이션을 실행하면 alter 문으로 컬럼이 추가된다. 단, 필드 삭제 후 재가동하면 컬럼 삭제가 되지는 않는다.
    • validate : 엔티티와 테이블이 정상 매핑되었는지만 확인
    • none : 이 설정을 사용하지 않는다. 주석 처리한 것과 같다.
    • 로컬 환경에서만 create나 update를 사용해도 되고, 테스트 서버에서는 update나 validate를 사용해도 된다. 운영 장비에서는 절대 create, create-drop, update를 사용해서는 안 된다!
  • JPA 구현체를 하이버네이트 말고 다른 걸로 변경할 때
    • property name이 javax.persistence로 시작하는 것은 JPA 표준 속성이기 때문에 그대로 사용해도 된다.
    • hibernate로 시작하는 것은 하이버네이트 자체에서 사용하는 것이므로 변경한 구현체 전용을 사용해야 한다.