JPQL (Java Persistence Query Language)

  • JPQL은 JPA의 일부로 정의된 플랫폼으로 독립적인 객체지향 쿼리 언어다.
  • JPQL은 관계형 데이터베이스의 엔티티에 대한 쿼리를 만드는데 사용된다.
  • SQL에 크게 영향을 받아 SQL문과 비슷하지만 데이터베이스 테이블에 직접연결되는것이 아니라 JPA엔티티에 대해 동작한다.
  • 그러므로, JPQL의 쿼리에는 테이블이 아닌 엔티티에서 표현하고 있는 칼럼의 이름을 써줘야한다.

EX) TypedQuery query = em.createQuery("select m from Member m", Memeber.class); List memberList = query.getResultList();


  • JPA에서 가장 중요한 2가지
    1. 객체와 관계형 데이터베이스 매핑하기
    1. 영속성 컨텍스트


영속성 컨텍스트


영속성2

엔티티 매니저 팩토리와 엔티티 매니저

  • 고객의 요청이 올때마다 엔티티 매니저를 생성하고 내부적으로 데이터베이스 커넥션을 사용해서 디비를 사용한다.

  • 영속성 컨텍스트 : 엔티티를 영구 저장하는 환경이라는 뜻 , EntityManager 안에 영속성 컨텍스트가 존재한다.

  • EntityManager.persist(entity); - > 디비에 저장하는것이 아니라 엔티티를 영속성 컨텍스트에 저장하는것

영속성1


EntityManagerFacory

  • 데이터베이스를 하나만 사용하는 어플리케이션은 일반적으로 EntityManagerFactory를 하나만 생성한다.
  • 만드는 비용이 상당히 크고 한 개만 만들어서 어플리케이션 전체에서 공유하도록 설계되었다.
  • 여러 스레드가 동시에 접근해도 안전하고, 서로 다른 스레드 간의 공유가 가능하다.


EntityManager 생성

  • EntityManger em = emf.createEntityManager(); //엔티티 매니저 생성
  • 여러 스레드가 동시에 접근하면 동시성 문제가 발생한다.
  • 스레드간의 절대 공유를 하면 안된다.
  • 데이터베이스 연결이 필요한 시점까지 커넥션을 얻지 않는다.

엔티티의 생명주기


엔티티


비영속 상태

  • 멤버객체를 생성하고 영속 컨텍스트(entityManager)에 넣지 않은 상태
Member member = new Member();
member.setId("멤버1");
member.setUserName("회원1");


영속 상태

  • 맴버 객체를 생성하고 영속 컨텍스트에 넣은 상태
//객체를 생성한 상태(비영속)
Member member = new Member();
member.setId("멤버1");
member.setUserName("회원1");

EntityManager em = emf.createEntityManager();
em.getTransaction().begin();

//객체를 저장한 상태(영속)
em.persist(member);


준영속과 삭제 상태

    //비영속
     Member member = new Member();
    member.setId(100L);
    member.setName("HelloJPA");

    //영속
    System.out.println("=====BEFORE=====");
    em.persist(member);
    em.detach(member); // 영속성 컨텍스트에서 다시 지움 
    em.remove(member); // 실제 디비에서 삭제를 실행함
    System.out.println("=====AFTER=====");
    tx.commit();


다음 내용 : 영속성 컨텍스트의 이점


😄 참고 : 인프런 김영한님의 JPA 기본 강의 및 교재 , 블로그 , 블로그

🌜 개인 공부 기록용 블로그입니다. 오류나 틀린 부분이 있을 경우 언제든지 댓글 혹은 메일로 지적해주시면 감사하겠습니다! 😄

개인메모

태그:

카테고리:

업데이트: