ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • -1- JPA 기본 설정
    웹 개발/Spring 2020. 12. 30. 08:12

    일전에 들은 스프링부트 강의에선 Gradle을 사용했는데 이번은 Java 8 +  Maven을 사용하였다.

    프로젝트를 만들고, 자동으로 생성된 'pom.xml'파일에 다음과 같이 dependencies를 추가해준다.

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
    
        <groupId>org.example</groupId>
        <artifactId>2020JPA</artifactId>
        <version>1.0-SNAPSHOT</version>
        <dependencies>
            <!-- JPA 하이버네이트 -->
            <dependency>
                <groupId>org.hibernate</groupId>
                <artifactId>hibernate-entitymanager</artifactId>
                <version>5.4.20.Final</version>
            </dependency>
    
            <!-- H2 데이터베이스 -->
            <dependency>
                <groupId>com.h2database</groupId>
                <artifactId>h2</artifactId>
                <version>1.4.200</version>
            </dependency>
        </dependencies>
    
    </project>

     

    한 가지 유의할 점이 있다면 사용하려하는 DB의 버전과 하이버네이트의 버전이 정상적으로 호환되는지,

    또 스프링부트를 사용한다면 스프링부트에서 최적화된 하이버네이트 버전은 어떻게 되는지 확인이 필요하다.

    (h2 DB 1.4.200 버전 기준 5.4.20.Final 버전)

     

    아래의 페이지에서 추가하려는 의존성을 검색하여 버전을 확인

    docs.spring.io/spring-boot/docs/current/reference/html/appendix-dependency-versions.html#dependency-versions

     

    Dependency versions

    The following table provides details of all of the dependency versions that are provided by Spring Boot in its CLI (Command Line Interface), Maven dependency management, and Gradle plugin. When you declare a dependency on one of these artifacts without dec

    docs.spring.io

     

     

     

     

     

     

    'pom.xml'의 설정을 마친 후 다음과 같은 경로에 'persistence.xml'을 생성한다.

    'META-INF'가 없다면 직접 생성해서 'persistence.xml'파일을 넣어주면 된다.

    파일경로를 다른 곳으로 설정할 수도 있는데 기본이 이 경로인 것으로 보인다.

     

     

     

     

    'persistence.xml'는 DB 및 하이버네이트의 설정을 할 수 있다. 

    <property name="javax.persistence.jdbc.driver" value="org.h2.Driver">

    위 값을 사용하는 DB에 맞춰 설정한다. 또 DB마다 사용하는 SQL문이 조금씩 다를 수 있는데

    이 문제를 하이버네이트에서 방언(Dialect)이라는 기능으로 알아서 DB에 알맞게 쿼리를 보내준다.

    <property name="hibernate.dialect" value="org.hibernate.dialect.H2Dialect"/>

    위 값을 사용하는 DB에 맞춰 설정한다.

     

    • H2 : org.hibernate.dialect.H2Dialect
    • Oracle 10g : org.hibernate.dialect.Oracle10gDialect
    • MySQL : org.hibernate.dialect.MySQL5InnoDBDialect

     

    <?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="jpa_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/~/2020JPA"/>
                <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.hbm2ddl.auto" value="create" />
            </properties>
        </persistence-unit>
    </persistence>

    부가 옵션

    hibernate.show_sql  :  실행되는 쿼리를 보여준다
    hibernate.format_sql : 쿼리를 보여줄 때 줄바꿈을 해서 보여준다.
    hibernate.use_sql_comments : 주석을 포함하여 보여준다.

     hibernate.hbm2ddl.auto : create, update 등 JPA실행 시 테이블을 생성할지 업데이트된 부분만 수정할지 설정한다.

     

     

     

     

     

    댓글

Designed by Tistory.