[JPA]EntityManagerFactory 설정 파일(application.properties, persistence.xml)

Noah-wilson·2024년 12월 24일

JPA

목록 보기
2/10

Spring Boot(application.properties) 사용법

Spring Boot 환경에서는 application.properties를 통해 JPA 설정을 하면, Spring Boot가 EntityManagerFactory와 EntityManager를 자동으로 생성하고 관리한다.
이 때문에 개발자가 직접 EntityManagerFactory를 생성할 필요 없이, @PersistenceContext를 통해 EntityManager를 주입받아 사용할 수 있다.

spring.datasource.url=jdbc:h2:tcp://localhost/~/testdb
spring.datasource.username=sa
spring.datasource.password=
spring.datasource.driver-class-name=org.h2.Driver

참고로 spring.datasource.url=jdbc:h2:mem:testdb를 사용하면 In-Memory로 실행할 수 있다.

@Service
@Transactional
public class MyService {
    @PersistenceContext
    private EntityManager em;

    public void saveEntity() {
        Member member = new Member();
        member.setName("JPA");
        member.setId(1L);
        em.persist(member);
    }
}

표준 JPA(persistence.xml) 사용법

persistence.xml은 JPA 표준 사양에 따라 Persistence Unit(영속성 단위)을 정의하는 설정 파일로 EntityManagerFactory를 초기화할 때 사용한다.
아래 코드와 같이 EntityManagerFactory를 생성하기 위한 설정을 해야 한다.

<?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>

JPA 표준만 사용하거나 Spring Boot 없이 순수 JPA를 사용할 때는 EntityManagerFactory와 EntityManager를 직접 생성해야 한다.
개발자가 수동으로 이를 통해 EntityManager를 생성하고 관리하며,
트랜잭션 관리 및 영속성 컨텍스트 생명주기를 직접 처리해야 한다.

public class MyJpaApp {
    public static void main(String[] args) {
        // persistence.xml에 정의된 persistence-unit 사용
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("examplePU");
        EntityManager em = emf.createEntityManager();

        em.getTransaction().begin(); // 트랜잭션 시작
        MyEntity entity = new MyEntity();
        entity.setName("Sample");
        em.persist(entity); // EntityManager 사용
        em.getTransaction().commit(); // 트랜잭션 커밋

        em.close(); // EntityManager 수동 종료
        emf.close(); // EntityManagerFactory 수동 종료
    }
}

0개의 댓글