JPA - 엔티티와 영속성

hj_kwon.log·2022년 12월 7일

JPA

목록 보기
1/2
post-thumbnail

📖 JPA - 엔티티와 영속성


📌 Entity 개념

Entity 클래스는 테이블과 매핑되는 클래스이다.
@Entity, @Table, @Column 등의 어노테이션을 사용하여 적절히 Entity 클래스를 구성하고, 완성된 Entity 클래스는 명세를 기반으로 테이블과 매핑된다.

@Entity
@Getter @Setter
@Table(name = "ORDERS")
public class Order {
	@Id @GeneratedValue
	@Column(name = "ORDER_ID")
	private Long id;
	@Column(name = "MEMBER_ID")
	private Long memberId;
	private LocalDateTime orderDate;
	private String status;
	
}
  • Order 클래스는 DB의 ORDERS 테이블에 매핑된다.

📌 Entity의 상태

Entity 클래스를 바탕으로 생성된 Entity는 생성부터 제거되기까지 4가지의 상태를 가질 수 있다.

  • New : 비영속
  • Managed : 영속
  • Detached : 준영속
  • Removed : 삭제

📌 New : 비영속

엔티티를 생성한 시점에서 트랜잭션 구간에 진입하기 전까지 엔티티는 비영속 상태로 유지한다. 이 상태에서는 엔티티는 데이터베이스와 전혀 관계가 없고, JPA의 어떤 특징도 보이지 않는, 그냥 평범한 객체이다.

	Member member = new Member();
	member.setId("userA");
    member.setUserName("회원1")

📌 Managed : 영속

엔티티가 트랜잭션 영역에 진입하여 엔티티 매니저의 관리하에 들어가면 해당 트랜잭션 구간동안 엔티티는 영속 상태가 된다. 영속 상태에서 엔티티는 몇가지 중요한 특징을 가지게 된다. JPA에 속해 있는 상태

  • 1차 캐시 사용
  • 같은 키 (식별값)를 사용하는 여러 객체의 동일성 보장
  • 지연된 쓰기와 변경사항 자동 업데이트
	em.persist(member);

📌 Detached : 준영속

엔티티가 커밋되어 트랜잭션 구간에서 빠져나오는 경우, 이 엔티티는 준영속 상태가 된다. 사실상 비영속 상태와 거의 같다.

  • 영속 상태를 거쳤기 때문에, 준영속 상태의 엔티티는 식별값을 가지고 있다.
	em.detach(member);

📌 Removed : 삭제

엔티티가 트랜잭션 구간 내에서 관련 메서드에 의해 삭제되는 경우, 매핑되는 데이터의 삭제와 함께 엔티티 또한 삭제 상태가 된다. 객체는 사용 가능한 상태이나, 재활용하지 않는 편이 좋다.

	em.remove(member);
profile
개발자가 되는 그날까지

0개의 댓글