🎯 JPA를 써야 하는 이유!
- Persistence(영속성): Java 객체에 포함된 데이터를 DB를통해 저장 및 관리함으로써 객체의 영속성을 보장함
- EntityMananger interface: 설정된 mapping에 따라 Java 객체를 테이블에 저장하고 수정, 삭제, 검색할 수 있는 인터페이스를 제공
- JDBC API나 Data Mapper(ex. MyBatis)의 대안: Java 객체 중심의 데이터 관리 가능
- SQL문 자동 생성 및 실행 (직접 작성할 필요 X, JDBC/MyBatis는 직접 작성)
⛓️ 구성요소
- Entity
- ORM 기술을 통해 DB에 영속적으로 저장 관리되는 객체
- Object-Relational Mapping(ORM) 설정
- Mapping 방법 정의, Annotation/XML 이용
- EntityManager
- JPQL(Java Persistence Query Language)
- Criteria API
📌 Entity
- 영속적인 데이터를 포함하는 POJO(Plain Old Java Object) 객체
- EntityManager에 의해 영속적으로 관리되는 객체 단위
📌 ORM 설정을 위한 주요 annotations
- Entity 정의
@Entity, @Embeddable, @Embedded
- Entity의 식별자 속성 정의
@Id, @IdClass, @EmbeddedId
- Entity와 테이블 간의 mapping 정의
@Table, @SecondaryTable, @Column, @JoinColumn, @PrimaryKeyJoinColumn, @Transient, @Temporal, @Enumerated, @GeneratedValue, @AttributeOverides, @Inheritance 등
- Entity들 사이의 연관관계 정의
@OneToOne, @OneToMany, @ManyToMany, @JoinTable 등
📌 EntityManager
- Entity를 영속 컨텍스트 안에서 영속적인 객체로 관리
- 영속적 객체에 대해 DB 저장, 갱신, 삭제 실행
- 트랜잭션 완료(commit)시 영속적 객체와 테이블(레코드) 간에 동기화 실행
- 질의 결과에 대해 영속적 객체 생성
✳️ Entity의 생명주기(life-cycle) 관리
➡️ EntityManager 주요 메소드
1. persist()
public void persist(Object entity);
🔊 순서
2. find()
public <T> T find(Class<T> entityClass, Object primaryKey);
3. merge()
public <T> T merge(T entity);
4. remove()
public void remove(Object entity);
⚡ @PersistenceContext란?
Java Persistence API (JPA)에서 엔티티 매니저(EntityManager)를 주입하는 데 사용되는 어노테이션
- spring 프레임워크에서 일반적인 의존성을 주입하는 @Autowired와 유사하다.