JPA EntityManagerFactory와 EntityManager

wujin·2023년 4월 4일
0

Java에서 EntityManagerFactory와 EntityManager의 사용

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.EntityTransaction;
import javax.persistence.Persistence;

public class JpaExample {
    public static void main(String[] args) {
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("persistence-unit-name");
        EntityManager em = emf.createEntityManager();
        EntityTransaction tx = em.getTransaction();
        
        try {
        	tx.begin(); // 트랜잭션 시작

        	// ... 작업

        	tx.commit(); // 트랜잭션 커밋
        } catch (Exception e) {
        	tx..rollback();
        } finally {
        	em.close(); // EntityManager 종료
        }
        
        emf.close(); // EntityManagerFactory 종료
    }
}

코드와 같이 트랜잭션을 개발자가 직접 관리한다.
필요에 따라서 영속성 컨텍스트를 비워야 한다면 중간에 다음과 같은 코드를 추가해준다.

em.flush(); // 영속성 컨텍스트의 캐시 내용을 모두 DB에 반영
em.clear(); // 영속성 컨텍스트의 캐시 clear

Spring에서 EntityManagerFactory와 EntityManager의 사용

Spring에서 JPA를 사용할 때, 일반적으로 EntityManagerFactory 및 EntityManager를 직접 선언하고 사용하지 않는다. 대신, Spring Framework의 기능을 활용하여 EntityManagerFactory와 EntityManager를 자동으로 생성한다.

Spring은 JPA를 위한 추상화 레이어인 Spring Data JPA를 제공한다. Spring Data JPA는 EntityManagerFactory와 EntityManager를 자동으로 생성하고, 필요한 경우 EntityManager를 트랜잭션 범위 내에서 공유한다.

이를 위해, 스프링은 Persistence Context를 관리하는 특별한 빈인 EntityManagerFactoryBean과 EntityManagerFactory를 생성한다. 이 빈은 EntityManagerFactory를 생성하고, 스프링 애플리케이션 컨텍스트에서 EntityManager를 주입받을 수 있게 해준다.

그리고 스프링은 JPA의 트랜잭션 관리를 위해, @Transactional 어노테이션을 사용하여 트랜잭션 범위 내에서 EntityManager를 사용할 수 있게 한다.

따라서, 스프링 프레임워크의 기능을 활용하여 EntityManagerFactory와 EntityManager를 자동으로 생성하고 관리할 수 있다. 이를 통해 개발자는 JPA를 보다 쉽게 사용할 수 있으며, 코드의 가독성과 유지보수성을 향상시킬 수 있다.


Spring에서 직접 선언 및 사용

..............ing

@Service
public class MyService {
    
    @PersistenceContext
    private EntityManager entityManager;
    
    // ...
}

0개의 댓글