DEV/JPA

[JPA] 시작하기, 기본 설정

Imvory 2024. 2. 14. 02:40

* 정보전달의 목적이 아닌 개인 스터디 정리 글 입니다.

 

강의 : 인프런 <자바 ORM 표준 JPA 프로그래밍 기본편>

교육자 : 김영한


JPA 시작하기

1. pom.xml에 JPA 하이버네이트, 사용할 데이터베이스 세팅

    <dependencies>
        <!-- JPA 하이버네이트 -->
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-core</artifactId>
            <version>6.4.2.Final</version>
        </dependency>

        <!-- H2 데이터베이스 -->
        <dependency>
            <groupId>com.h2database</groupId>
            <artifactId>h2</artifactId>
            <version>2.2.224</version>
        </dependency>

    </dependencies>

 

2. /META-INF/persistence.xml JPA 설정파일 생성

<?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="hello">
        <properties>
            <!-- 필수 속성 -->
            <property name="jakarta.persistence.jdbc.driver" value="org.h2.Driver"/>
            <property name="jakarta.persistence.jdbc.user" value="sa"/>
            <property name="jakarta.persistence.jdbc.password" value=""/>
            <property name="jakarta.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.hbm2ddl.auto" value="create" />-->
        </properties>
    </persistence-unit>

</persistence>

 

* Java 17은 클래스명이 javax 에서 jakarta로 변경되었으니 유의

* JPA의 경우 특정 데이터베이스에 종속되지 않는 장점이 있음

→  hibernate.dialect 속성에 지정

 

JPA 구동방식

1. JPA 설정파일 조회

2. 엔티티 매니저 팩토리 생성

3. 엔티티 매니저 팩토리에 의해 엔티티 매니저들을 생성

 

주의사항

* 엔티티 매니저 팩토리는 하나만 생성해서 애플리케이션 전체 공유

* 엔티티 매니저는 쓰레드간에 공유하지 않음(사용하고 버리기!)

* JPA의 모든 데이터 변경은 트랜잭션 안에서 실행