Spring/JPA

[Spring/JPA] EntityManager, EntityManagerFactory

오잎 클로버 2022. 6. 3. 09:30
728x90

※ 본 글은 저자 김영한 개발자의 "자바 ORM 표준 JPA 프로그래밍"의 내용을 요약하였습니다. ※

엔티티 매니저는 영속성 컨텍스트라는 곳에서 엔티티들을 관리하는 클래스이며,

엔티티 매니저 팩토리는 위 엔티티 매니저들을 생성하는 엔티티 매니저 공장이라고 생각하면 된다.

 

데이터베이스를 하나만 사용하는 경우, 보통 EntityManagerFactory를 하나만 생성한다.

엔티티 매니저 팩토리는 생성할 때마다 같은 persistence-unit name으로 지정해서 생성하더라도 계속 새로운 엔티티를 생성하므로  싱글톤, 의존성 주입과 같은 방식으로 개발을 해야한다.

EntityManagerFactory emf = Persistence.createEntityManagerFactory("jpabook");

META-INF/Persistence.xml에 있는 정보를 바탕으로 생성한다.

persistence-unit name으로 "jpabook"을 지정하고, properties로 드라이버, 유저명, 비밀번호, url 등을 지정한다.

 

EntityManager em = emf.createEntityManager();

엔티티 매니저 팩토리는 쓰레드 세이프하며 쓰레드의 공유 자원으로도 사용이 가능하지만, 

엔티티 매니저는 동시성 문제가 발생하기에 공유할 수 없다.

 

그렇기에 엔티티 매니저 팩토리로 다수의 엔티티 매니저를 생성하는 데 각 엔티티 매니저들은 DB 연결이 필연적인 순간에만 커넥션을 얻는다. (트랜잭션이 시작할 때 커넥션을 획득한다.)

많은 JPA 구현체들은 엔티티 매니저 팩토리를 생성할 때 커넥션 풀 역시 생성한다. (persistence.xml에 접속 정보가 포함되어 있다.)

 

 

이상입니다.

JPA 91/735 페이지

'Spring > JPA' 카테고리의 다른 글

[Spring/JPA] JPA 연관관계  (0) 2023.02.13
[Spring/JPA] JPA(Hibernate 구현체) DDL 전략  (0) 2022.06.17
[Spring/JPA] JPA 객체 매핑  (0) 2022.05.27
[Spring/JPA] JPA 소개  (0) 2022.05.25
[Spring/JPA] JPA의 등장배경  (0) 2022.05.18