
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;
}
Entity 클래스를 바탕으로 생성된 Entity는 생성부터 제거되기까지 4가지의 상태를 가질 수 있다.
엔티티를 생성한 시점에서 트랜잭션 구간에 진입하기 전까지 엔티티는 비영속 상태로 유지한다. 이 상태에서는 엔티티는 데이터베이스와 전혀 관계가 없고, JPA의 어떤 특징도 보이지 않는, 그냥 평범한 객체이다.
Member member = new Member();
member.setId("userA");
member.setUserName("회원1")
엔티티가 트랜잭션 영역에 진입하여 엔티티 매니저의 관리하에 들어가면 해당 트랜잭션 구간동안 엔티티는 영속 상태가 된다. 영속 상태에서 엔티티는 몇가지 중요한 특징을 가지게 된다. JPA에 속해 있는 상태
em.persist(member);
엔티티가 커밋되어 트랜잭션 구간에서 빠져나오는 경우, 이 엔티티는 준영속 상태가 된다. 사실상 비영속 상태와 거의 같다.
em.detach(member);
엔티티가 트랜잭션 구간 내에서 관련 메서드에 의해 삭제되는 경우, 매핑되는 데이터의 삭제와 함께 엔티티 또한 삭제 상태가 된다. 객체는 사용 가능한 상태이나, 재활용하지 않는 편이 좋다.
em.remove(member);