JPA는 사용하기 전에 알아야 할 개념들이 있다.
그 중에서도 기본적인 개념인 Entity / 영속성 컨텍스트 / 라이프 사이클에 대해 알아보자.
JPA Entity
- 테이블과 대응하는 하나의 클래스
- Entity 4가지 상태 : 비영속, 영속, 준영속, 삭제
- Entity 예시 코드
- @Entity : 엔티티 클래스에 설정, 필수값
- @Table : 엔티티와 매핑할 테이블명 지정
- @Id : 식별자 속성에 설정, 필수값
- @Coulumn : 매핑할 테이블의 컬럼, 제약조건, 필드면 다른 경우 name 지정 가능
@Entity
@Table(name = "user")
public class UserEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(nullable = false, insertable = false, updatable = false)
private Long id;
@Column(nullable = false, updatable = false, length = 20)
private String userId;
@Column(nullable = false, length = 100)
private String name;
@Column(nullable = false, length = 100)
private String email;
}
JPA에서 핵심이 되는 개념!
영속성 컨텍스트는 엔티티를 관리하는 컨텍스트 이다.
관리하고자 하는 엔티티를 영속성 컨텍스트에 담아서 변경을 추적해서 트랜잭션 커밋 시점에 변경을 반영한다.
엔티티를 조회, 저장하는 경우 영속성 컨텍스트에 담기게 되고, 영속 상태가 된 엔티티는 관리가 되어서 엔티티의 값이 변경되거나 하면 이후커밋 시점에 반영이 되어 DB에 저장이 된다.
영속성 컨텍스트 Persistence context
- 엔티티를 관리하는 컨텍스트
- 영속성 컨텍스트는 Entity Manager를 통해서 접근, 관리 가능
- DB에서 읽어온 객체, Entity Manager를 통해 조회, 저장한 객체를 저장하고 있는 일종의 메모리 공간
- Entity Manager로 엔티티를 조회, 저장 하면 Entity Manager가 영속성 컨텍스트에 Entity를 보관하고 관리함
- 영속 객체를 보관하고 있다 commit 시점에 컨텍스트에 있는 객체와 프로그램 사용한 객체의 변경이 발생한 경우 변경 내용을 DB에 반영
- 응응프로그램(엔티티) > 영속 컨텍스트(영속객체) > DB(데이터)
- 영속성 컨텍스트는 엔티티를 식별자 값으로 구분, 영속 상태는 반드시 식별자 값이 있어야 함
- 영속성 컨텍스트가 엔티티 관리 시 장점
- 1차 캐시
- 동일성 보장
- 변경 감지 등
Entity 라이프 사이클
- 비영속(new / transient) : 영속성 컨텍스트와 전혀 관계가 없는 상태
- 영속(managed) : 영속성 컨텍스트에 저장된 상태 (엔티티 매니저를 통해 저장)
- 영속성 컨텍스트가 관리하는 엔티티를 영속 상태라고 함
- 준영속(datached) : 영속성 컨텍스트에 저장되었다가 분리된 상태
- em.datach(), em.close(), em.clear() 호출 시 영속성 컨텍스트가 관리하던 영속 상태의 엔티티는 준영속 상태가 됨
- 준영속, 분리된 상태가 되면 변경을 추적하지 않음
- 삭제(removed) : 삭제된 상태
- 엔티티를 영속성 컨텍스트와 데이터베이스에서 삭제
- em.remove(entity)
반응형
'Java | spring > JPA' 카테고리의 다른 글
JPA 조회 동작 방식 비교 : findById(), getOne(), getReferenceById() (0) | 2024.03.27 |
---|---|
JPA 영속성 컨텍스트 장점(+ 테스트 코드) (0) | 2023.10.09 |
JPA 영속성 컨텍스트 및 내부 동작 방식 (2) | 2023.10.08 |
JPA 사용 하는 이유는? (+ ORM 과 SQL mapper 비교) (0) | 2022.10.17 |
JPA란 무엇인가? Mybatis와 차이점 (+기초 무료 인강 추천) (0) | 2022.10.14 |
댓글