JPA | EntityManager, EntityManagerFactory, Entity, PersistenceUnit
2024. 1. 17. 09:33
영속성 컨텍스트

영속성 컨텍스트 ( Persistence Context ) : 자바에서 데이터 베이스 테이블과 Mapping 할 객체 ( Entity ) 를 관리하는 환경
영속성 컨텍스트에 대한 이해를 위해 알아야할 내용들이다.
PersistenceUnit


JPA 를 사용하는 설정 정보와 DB 접속 정보를 담고 있는 단위로써 Persistence.xml 파일 형식으로 구성하거나
Spring 환경의 경우 application.yml 등의 어플리케이션 설정 파일에 정의할 수 있다.
( 사실상 SpringBoot 환경을 많이 사용하면 application.properties 나 application.yml 에 DB 접속 정보 및 JPA 설정 정보를 정의하기 때문에, PersisteneceUnit 에 대해서는 이번에 공부하면서 알게 되었다. Spring 에서 내부적으로 많은 기능들이 내장되어 있음을 실감했다.)
EntityManagerFactory 와 EntityManager


EntityManagerFactory : PersistenceUnit 의 내용을 사용하여 EntityManager 인스턴스를 생성, 관리하는 객체
어플리케이션 실행 시 한번 만 실행된다.
EntityManger : EntityMangerFactory 객체로 부터 생성된 객체.
특정 트랜잭션 범위에서 엔터티(Entity)에 대한 작업을 수행하는데 사용하며 엔티티의 생명주기를 관리한다.
JPA 에 핵심적인 기술을 사용할 수 있다.
- 영속성 관리
- 트랜잭션 관리
- 쿼리 수행
- 로딩 관리
- 캐싱 관리
예시
import javax.persistence.*;
import java.util.List;
public class getResultListT {
public static void main(String[] args)
{
EntityManagerFactory emf = Persistence.createEntityManagerFactory("hello");
EntityManager em = emf.createEntityManager();
EntityTransaction tx = em.getTransaction();
tx.begin();
...
}
}
<?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">
...
</persistence-unit>
</persistence>
Entity
import javax.persistence.*;
@Entity
public class Member
{
@Id @GeneratedValue
private Long id;
...
}
import jakarta.persistence.*;
import lombok.*;
import java.util.ArrayList;
import java.util.List;
@Entity
@Getter
@Builder
@AllArgsConstructor
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@Table(uniqueConstraints = @UniqueConstraint(columnNames = {"loginId"}))
public class Auth extends BaseEntity
{
@Id @GeneratedValue
@Column(name = "auth_pid")
private Long pid;
}
@Entity
어노테이션을 활용하여 해당 객체가 Entity 임을 선언한다.
선언된 객체만 영속성 컨텍스트에서 관리가 된다.
@Id
엔티티의 식별자 필드임을 선언하는 어노테이션이다.
영속성 컨텍스트 내부 식별자이며 테이블에서 PK 이다.
정리

정리해보면 ..
PersistenceUnit 에 JPA 설정 정보 및 접속 정보를 설정하고 어플리케이션을 동작시키면
EntityManagerFactory 객체가 PersistenceUnit 의 이름을 사용하여 EntityManager 인스턴스를 생성한다.
EntityManger 는 @Entity 로 선언된 객체를 관리하며 @Id 로 정의된 엔티티 객체의 필드를 식별자로 사용한다.
기본적인 내용이여서 까먹진 않겠지만
글을 작성하며 배웠던 내용을 상기시킬 수 있어서 좋았다.
이후 1차 캐시 나 더티 채킹 정도만 작성할 예정이다.
'SpringBoot > JPA' 카테고리의 다른 글
JPA | flush, clear, persist , emerge, find, createQuery, bulk 연산 (2) | 2024.01.25 |
---|---|
JPA | 영속성 컨텍스트 구조 | 쓰기 지연 큐 ( SQL 쿼리 저장소 ), 1차 Cache (2) | 2024.01.23 |
Entity Life Cycle | Transient, Managed, Detached, Removed (1) | 2024.01.21 |
JPA 란 (1) | 2024.01.15 |