JPQL

Hyun·2023년 8월 7일
0

Spring

목록 보기
23/38
post-thumbnail

//JPQL 이용

        em.createQuery("select o from Order o join o.member m" +
                        " where o.status = :status " +
                        " and m.name like :name", Order.class)
                .setParameter("status", orderSearch.getOrderStatus())
                .setParameter("name", orderSearch.getMemberName())
                .setMaxResults(1000)
                .getResultList();

주어진 코드는 JPQL(Querydsl 등)을 사용하여 Order 엔티티와 Member 엔티티를 조인하고, 조건에 따라 검색 결과를 반환하는 예제입니다.

em.createQuery(): EntityManager의 createQuery() 메서드를 사용하여 JPQL 쿼리를 생성합니다. JPQL은 객체 지향 쿼리 언어로서, 엔티티와 관련된 객체를 대상으로 쿼리를 작성할 수 있습니다.

주어진 JPQL 쿼리 "select 0 from Order o join o.member m where o.status = :status and m.name like :name"은 Order 엔티티를 선택하되, Order 엔티티의 member 속성의 name과 Order 엔티티의 status에 따라 조건을 걸어 선택하는 것을 의미합니다.

사용된 JPQL 키워드와 구문

  • select o: select 키워드를 사용하여 쿼리의 결과로 반환될 값(여기서는 o을 사용)을 선택합니다.

  • from Order o: from 키워드를 사용하여 Order 엔티티를 o라는 별칭으로 지정하여 선택합니다. 이 별칭은 이후 쿼리에서 엔티티를 참조할 때 사용됩니다.

  • join o.member m: join 키워드를 사용하여 Order 엔티티의 member 속성을 m이라는 별칭으로 조인합니다. 이렇게 함으로써 Order 엔티티와 Member 엔티티를 조인할 수 있습니다.

  • where o.status = :status: where 키워드를 사용하여 Order 엔티티의 status 속성과 파라미터 :status를 비교하는 조건을 지정합니다. 이렇게 함으로써 Order 엔티티의 status가 :status와 일치하는 경우만 검색 결과로 선택됩니다.

  • and m.name like :name: and 키워드를 사용하여 Order 엔티티의 member 속성인 name과 파라미터 :name을 비교하는 조건을 추가합니다. like 연산자를 사용하여 name이 :name과 유사한 경우만 검색 결과로 선택됩니다.

따라서, 주어진 JPQL 쿼리는 Order 엔티티와 Member 엔티티를 조인하여, Order 엔티티의 status가 :status와 일치하고, Member 엔티티의 name이 :name과 유사한 검색 결과를 선택하는 쿼리입니다.

profile
better than yesterday

1개의 댓글

comment-user-thumbnail
2023년 8월 7일

많은 것을 배웠습니다, 감사합니다.

답글 달기