JPA는 실행 속성을 포함하고 있는 persistence.xml을 기반으로 하여 동작하도록 구성되어 있다. persistence.xml 파일의 주요 구성 요소와 속성 정의 방법에 대해 살펴보기로 한다. 먼저, persistence.xml 파일은 가장 상위에 <persistence> 태그를 포함하고 있으며 <persistence> 태그 내에 여러개의 <persistence-unit>를 포함할 수 있다.
Persistence Unit에 포함하고 있는 주요한 엔티티들은 다음과 같다.
element 명 | 설 명 |
---|---|
provider | Entity Manager를 지원하는 Provider 클래스 |
mapping-file | 매핑정보 파일 |
class | Entity 클래스 리스트, @Entity, @Embeddable or @MappedSuperclass 를 포함하고 있는 클래스 |
exclude-unlisted-classes | class 에서 정의하지 않은 것은 제외 |
properties | JPA 구현체 프로퍼티 리스트 |
상세한 정보는 스키마 참조 아래는 위의 항목을 포함하고 있는 설정파일 예입니다.
<persistence-unit name="HSQLMUnit" transaction-type="RESOURCE_LOCAL"> <provider>org.hibernate.ejb.HibernatePersistence</provider> <class>egovframework.sample.model.bidirection.User</class> <exclude-unlisted-classes/> <properties> <property name="hibernate.connection.driver_class" value="net.sf.log4jdbc.DriverSpy"/> ...
Properties 아래에 정의되는 Vendor별 설정 정보중에 Hibernate의 설정정보에 대해서 설명한다. 좀더 자세한 사항은 Hibernate사이트를 참조한다.
아래의 속성들을 통해 Hibernate는 특정 DB에 접근하여 데이터 액세스 처리가 가능하다.
속 성 명 | 설 명 |
---|---|
hibernate.connection.driver_class | 접근 대상이 되는 DB의 Driver 클래스명을 정의하기 위한 속성 |
hibernate.connection.url | 접근 대상이 되는 DB의 URL을 정의하기 위한 속성 |
hibernate.connection.username | DB에 접근할 때 사용할 사용자명을 정의하기 위한 속성 |
hibernate.connection.password | DB에 접근할 때 사용할 패스워드를 정의하기 위한 속성 |
다음은 위에서 언급한 속성들을 포함하고 있는 persistence.xml 파일의 일부이다
<property name="hibernate.connection.driver_class" value="net.sf.log4jdbc.DriverSpy"/> <property name="hibernate.connection.url" value="jdbc:log4jdbc:hsqldb:mem:testdb"/> <property name="hibernate.connection.username" value="sa"/>
아래의 속성들을 통해 Hibernate는 특정 DB에 접근하여 데이터 액세스 처리가 가능하다.
속 성 명 | 설 명 |
---|---|
hibernate.dialect | Hibernate 기반 개발시 DB에 특화된 SQL을 구성하지 않더라도 DB에 따라 알맞은 SQL을 생성할 수 있다. 이를 위해서 Dialect 클래스를 사용한다. hibernate.dialect는 Dialect 클래스명을 정의하기 위한 속성 |
hibernate.default_schema | Hibernate에서 SQL을 생성할 때 특정 테이블에 대해 별도 정의된 Schema가 없는 경우 적용할 DB Schema 명을 정의하기 위한 속성 |
hibernate.default_catalog | Hibernate에서 SQL을 생성할 때 특정 테이블에 대해 별도 정의된 Catalog가 없는 경우 적용할 DB Catalog 명을 정의하기 위한 속성 |
다음은 위에서 언급한 속성들을 포함하고 있는 persistence.xml 파일의 일부이다
<property name="hibernate.dialect" value="org.hibernate.dialect.HSQLDialect"/>
다음은 Hibernate에서 제공하는 주요 Dialect 클래스 목록이다
DB 종류 | Dialect 클래스 |
---|---|
Oracle 10g | org.hibernate.dialect.Oracle10gDialect |
Oracle 9i/10i | org.hibernate.dialect.Oracle9iDialect |
Oracle (모든 버전) | org.hibernate.dialect.OracleDialect |
MySQL 5.x | org.hibernate.dialect.MySQL5Dialect |
MySQL 4.x, 3.x | org.hibernate.dialect.MySQLDialect |
DB2 | org.hibernate.dialect.DB2Dialect |
Sybase 11.9.2 | org.hibernate.dialect.Sybase11Dialect |
Sybase Anywhere | org.hibernate.dialect.SybaseAnywhereDialect |
아래의 속성들을 통해 Hibernate는 Cache 기능을 지원한다.
속 성 명 | 설 명 |
---|---|
hibernate.cache.provider_class | Cache 기능을 구현하고 있는 구현체의 클래스명을 정의하기 위한 속성 |
hibernate.cache.use_second_level_cache | 2nd Level Cache를 적용할지 여부를 정의하기 위한 속성 (true/false) |
hibernate.cache.use_query_cache | Hibernate Query를 Caching할지 여부를 정의하기 위한 속성 (true/false) |
다음은 위에서 언급한 속성들을 포함하고 있는 persistence.xml 파일의 일부이다
<property name="hibernate.cache.use_second_level_cache" value="true"/> <property name="hibernate.cache.use_query_cache" value="true"/> <property name="hibernate.cache.provider_class" value="org.hibernate.cache.EhCacheProvider"/>
아래의 속성들을 통해 Hibernate는 좀더 자세한 Logging 기능을 지원한다.
속 성 명 | 설 명 |
---|---|
hibernate.show_sql | Hibernate을 통해 생성된 SQL을 콘솔에 남길 것인지 여부를 정의하는 속성 (true/false) |
hibernate.format_sql | hibernate.show_sql=true인 경우 해당 SQL문의 포맷을 정돈하여 콘솔에 남길 것인지 여부를 정의하는 속성 (true/false) |
hibernate.use_sql_comments | Hibernate을 통해 생성된 SQL을 콘솔에 남길 때 Comments도 같이 남길 것인지 여부를 정의하는 속성 (true/false) |
다음은 위에서 언급한 속성들을 포함하고 있는 persistence.xml 파일의 일부이다
<property name="hibernate.show_sql" value="true"/> <property name="hibernate.format_sql" value="true"/>
속 성 명 | 설 명 |
---|---|
hibernate.hbm2ddl.auto | DDL을 자동으로 검증,생성 또는 수정할지 여부를 정의하기 위한 속성 (validate/ update/ create/ create-drop) |
hibernate.jdbc.batch_size | Hibernate는 일반적으로 실행해야 할 SQL들에 대해 일괄적으로 batch 처리를 수행하는데 이 때 batch로 처리할 SQL의 개수를 정의하기 위한 속성 |
다음은 위에서 언급한 속성들을 포함하고 있는 persistence.xml 파일의 일부이다
<property name="hibernate.hbm2ddl.auto" value="create-drop"/> <property name="hibernate.jdbc.batch_size" value="10" />