관계형 데이터베이스와 매핑되는 객체인 Entity를 관리하는 EntityManager 빈을 생성하는 팩토리 객체로 thread safe 하다.
Entity의 저장, 수정, 삭제, 조회와 관련된 모든 일을 처리하는 빈으로 영속성 컨텍스트에 관리되는 엔티티의 변화를 감지하여 데이터베이스에도 동기화가 될 수 있게 자동으로 SQL문을 실행하는 역할을 수행한다.
비영속
영속성 컨텍스트와 전혀 관계 없는 상태로 데이터베이스에 저장하지 않은 엔티티 객체가 이에 해당된다.
영속
persist를 통해 영속성 컨텍스트에 entity를 등록할 수 있다. 기본적으로 EntityManager의 find나 createQuery를 통해 조회된 Entity는 영속성 컨텍스트에 포함된다.
준영속
detach를 통해 영속성 컨텍스트를 분리할 수 있고 준영속 상태에 있는 entity를 다시 영속성 컨텍스트에 편입시키려면 merge를 해야한다.
삭제
remove를 통해 영속성 컨텍스트에서 분리하고 DB에서 삭제가 가능하다.
Entity 객체를 생성할 때 아노테이션으로 설정된 단일 엔티티 매핑을 통해 데이터베이스에 대한 자료형 지정이 가능하다.
@Entity
@Table(name = "orders")
public class Order {
//영속성 컨텍스트에 1차 캐쉬에 저장되기 위한 필수 속성
@Id
//auto increment(mysql)
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private String uuid;
//time stamp 속성
@Column(name = "order_datetime", columnDefinition = "TIMESTAMP")
private LocalDateTime orderDatetime;
//enum type
@Enumerated(EnumType.STRING)
private OrderStatus orderStatus;
//varchar(255) 이상의 긴 문자열을 저장하기 위한 속성
@Lob
private String memo;
}