JPA란?

Java Persistence API의 약자로 자바 진영의 ORM(Object Relational Mapping) 기술 표준이다.

ORM을 왜 쓰는걸까?

ORM을 사용함으로써 객체는 객체대로 설계하고 관계형 데이터베이스는 관계형 데이터베이스대로 설계가 가능해진다. (ORM 프레임워크가 중간에서 매핑해주기 때문)

JPA를 쓰면 뭐가 좋은데?

  1. SQL 중심적인 개발에서 객체 중심으로 개발
  2. 생산성 증가와 유지보수가 편리해진다
  3. 객체 지향과 관계형 데이터베이스 사이의 패러다임의 불일치를 해결

써야겠지?

JPA의 구동 방식

Untitled

JPA의 구동방식을 살펴보면 아래와 같이 META-INF라는 곳 아래에 persistence.xml을 설정정보로 참고한 뒤 EntityManagerFactory를 생성하고 거기서 EntityManager를 생성해서 요청을 실행한다.

EntityManager는 한 트랜잭션 시작과 동시에 생성 후 트랜잭션이 끝나기 전 닫힌다.

막간을 틈타 설명하는 엔티티의 생명주기 (우리가 자주 보던 그 이미지)

Untitled

  1. 비영속

    영속성 컨텍스트와 전혀 관계가 없는 새로운 상태

    **//객체를 생성한 상태(비영속)
    
    Member member = new Member();
    member.setId("member1");
    
    member.setUsername("회원1");**
    
    
  2. 영속

    영속성 컨텍스트에 관리되는 상태

    //객체를 생성한 상태(비영속)
    Member member = new Member();
    member.setId("member1");
    member.setUsername(“회원1”);
    
    EntityManager em = emf.createEntityManager();
    em.getTransaction().begin();
    
     //객체를 저장한 상태(영속)
    em.persist(member);
    
  3. 준영속

    영속성 컨텍스트에 저장되었다가 분리된 상태

    //회원 엔티티를 영속성 컨텍스트에서 분리, 준영속 상태
     em.detach(member);