JPA-02 EntityManagerLifeCycle

yj k·2023년 4월 9일
0

jpa

목록 보기
2/14

JAP 코드는 크게 3가지로 나뉘어있다.

엔터티 매니저 설정
트랜젝션 관리
비지니스 로직

JAP를 시작하려면 persistence.xml의 설정정보를 사용해서 엔터티 매니저 팩토리를 생성해야한다.

META-INF/persistence.xml에서 persistence-unit을 찾아서 엔터티 매니저 팩토리를 생성한다.
JPA를 동작시키기 위한 기반 객체를 만든다.

<persistence-unit name="jpatest">
		<properties>
			<property name="javax.persistence.jdbc.driver" value="oracle.jdbc.driver.OracleDriver"/>
			<property name="javax.persistence.jdbc.user" value="C##GREEDY"/>
			<property name="javax.persistence.jdbc.password" value="GREEDY"/>
			<property name="javax.persistence.jdbc.url" value="jdbc:oracle:thin:@localhost:1521:xe"/>
			
			<!-- 실행되는 SQL구문을 보기위한 코드, 한줄로 뜨는 SQL 구문을 포맷된 형태로 볼 수 있는 요청 코드 -->
			<property name="hibernate.show_sql" value="true"/>
			<property name="hibernate.format_sql" value="true"/>
		</properties>
	
	</persistence-unit>

엔터티 매니저 팩토리(EntityManagerFactory)란?

엔터티 매니저를 생성할 수 있는 기능을 제공하는 팩토리 클래스
여러 스레드가 동시에 접근 가능하기때문에 서로 다른 스레드간 공유해서 재사용.
시간, 메모리 부담이 크기 때문에 싱글톤으로 생성해서 관리한다.
데이터베이스를 사용하는 Application당 한 개의 EntityManagerFactory를 생성.

사용이 끝난 엔터티 매니저 팩토리는 종료해야한다.

@BeforeAll
	public static void initFactory() {
		
		entityManagerFactory = Persistence.createEntityManagerFactory("jpatest");
	}
    
    
@AfterEach
	public void closeManager() {
		
		entityManager.close();
	}

엔터티 매니저(EntityManager)란?

엔터티를 저장하는 메모리상의 데이터베이스.
CRUD등 엔티티와 관련된 모든 일을 한다.
동시성 문제가 발생할 수 있기 때문에 스레드간 공유하지 않는다.

사용이 끝난 엔터티 매니저도 종료해야한다.

	@BeforeEach
	public void initManager() {
		
		entityManager = entityManagerFactory.createEntityManager();
	}
    
    
@AfterEach
	public void closeManager() {
		
		entityManager.close();
	}
	

영속성 컨텍스트(PersistenceContext)란?

엔터티를 영구 저장하는 환경을 말한다.
엔터티 매니저에 엔터티를 저장(persist();)하거나 조회(find();)하면, 엔터티 매니저는 영속성 컨텍스트에 엔터티를 보관하고 관리한다.
영속성 엔터티를 Key, Value 방식으로 저장하는 저장소 역할.
key @Id로 매핑한 식별자/ Value는 엔터티 인스턴스

영속성컨텍스트는 엔터티 매니저를 생성할 때 하나 만들어지고,
엔터티 매니저를 통해서 영속성 컨텍스트에 접근, 관리할 수 있다.

0개의 댓글