Spring

[JPA] Entity EntityManager EntityManagerFactory PersistenceContext

📝 작성 : 2020.08.05  ⏱ 수정 : 
728x90

Entity

테이블에 대응하는 클래스입니다.

Entities in JPA are nothing but POJOs representing data that can be persisted to the database. An entity represents a table stored in a database. Every instance of an entity represents a row in the table.
출처 : https://www.baeldung.com/jpa-entities

EntityManager

Entity 객체를 관리하는 역할을 합니다. 여기서 관리란 Entity의 Life Cycle입니다. 이는 나중에 따로 포스팅 하겠습니다.
EntityManager는 관리하는 Entity를 Persistence Context(영속성 컨텍스트)에 넣어두고 관리합니다.
EntityManagerFactory에서 생성, JPA의 기능 대부분은 EntityManager가 제공합니다.(대표적으로 DB에 등록/수정/삭제/조회)
내부적으로는 DB 커넥션풀을 유지하면서 DB와 통신합니다. 따라서 EntityManagerFactory와 다르게 스레드간 공유 및 재사용을 하면 안됩니다.
DB 연결이 꼭 필요한 시점까지는 커넥션을 얻지 않습니다.

EntityManager em = emf.createEntityManager();

EntityManagerFactory

데이터베이스 하나를 연결 할 떄 EntityManagerFactory하나를 생성하여 재사용, Hibernate의 SessionFactory와 유사합니다.
하나를 생성하여 재사용 하는 이유는 생성 비용이 매우 크기 때문입니다. (설정 정보를 읽어서 JPA 동작의 기반 객체를 만들고 JPA 구현체에 따라서는 DB 커넥션풀도 생성합니다.), 여러 스레드가 동시에 접근해도 안전합니다.

J2SE

EntityManagerFactory emf = Persistence.createEntityManagerFactory(persistence-unit name);
// META-INF/persistence.xml의 persistence-unit의 name속성 값을 넣어줍니다.

J2EE

@PersistenceUnit
EntityManagerFactory emf;
// @PersistenceContext 어노테이션을 통해 EntityManage를 주입받아 사용할 수 있기 때문에 잘 사용하지는 않습니다.
반응형