[JPA] 객체지향 쿼리

  1. 식별자로 조회
    • EntityManager.find() 사용
    • 정의
      • 데이터베이스에서 엔티티를 식별자(ID)를 사용하여 조회하는 가장 기본적인 방법
      • 엔티티 객체를 시작점으로 객체 그래프 탐색을 통해 관련됨 다른 엔티티들에 접근
    • 코드
      // EntityManager를 사용하여 ID로 엔티티 조회
      MyEntity entity = entityManager.find(MyEntity.class, entityId);
  1. 객체 그래프 탐색
    • 객체를 통해 연관된 다른 객체로 이동하는 것
    • a.getB() getC() 같은 연쇄 호출을 통해 객체 접근
    // 객체 그래프 탐색을 통한 연관 엔티티 탐색
    Address address = member.getAddress();
    City city = address.getCity();
  1. 복잡한 검색 요구 + JPQL
    • 설명
      • 단순 조회나 객체 그래프로는 복잡한 비즈니스 로직을 처리하기가 힘듭니다..
      • 나이가 30살 이상인 회원 검색의 경우
        • 해당 조건을 충족하는 검색기능이 필요함
        • 모든 회원을 메모리에 로드할수는 없음.. → 데이터가 100만건이면 다 메모리에 띄우게?
        • JPQL 을 사용하여 DB에서 필터링이 필요
    // JPQL 사용 예시
    TypedQuery<Member> query = entityManager.createQuery(
        "SELECT m FROM Member m WHERE m.age >= :age", Member.class);
    query.setParameter("age", 30);
    List<Member> members = query.getResultList();
  • 기타 JPA 지원 검색 방법
    • 공식
      1. JPQL
      1. Criteria Query
      1. 네이티브 SQL
    • 비공식
      1. QueryDSL
      1. JDBC 혹은 Mybatis 혼합

    QueryDSL 이든 Criteria Query 든 JPQL 을 더 편리하게 작성하도록 도와주는 도구일 뿐이다.


Uploaded by N2T