11. 객체지향 쿼리 언어 - 중급 문법 (엔티티 직접 사용)

HotFried·2023년 10월 5일
0

기본 키 값

  • JPQL에서 엔티티를 직접 사용하면 SQL에서 해당 엔티티의 기본 키 값을 사용한다.

JPQL

select count(m.id) from Member m //엔티티의 아이디를 사용
select count(m) from Member m //엔티티를 직접 사용

SQL(위 두 JPQL 둘다 같은 SQL이 실행된다)

select count(m.id) as cnt from Member m

예제

엔티티를 파라미터로 전달

public class JpaMain {
    public static void main(String[] args) {
        String jpql = "select m from Member m where m = :member";
        List resultList = em.createQuery(jpql)
                .setParameter("member", member).getResultList();
    }
}

식별자를 직접 전달

public class JpaMain {
    public static void main(String[] args) {
        String jpql = "select m from Member m where m.id = :memberId";
        List resultList = em.createQuery(jpql)
                .setParameter("memberId", memberId).getResultList();
    }
}

둘 다 아래와 같은 SQL이 실행된다.

select m.* from Member m
where m.id = ?

외래 키 값

연관 관계 매핑시 설정한 FK(Foreign Key)를 이용한다.

예제

엔티티를 파라미터로 전달

public class JpaMain {
    public static void main(String[] args) {
        Team team = em.find(Team.class, 1L);
        
        // 엔티티를 파라미터로 전달
        String qlString = "select m from Member m where m.team = :team";

        List resultList = em.createQuery(qlString)
                .setParameter("team", team).getResultList();
    }
}

식별자를 직접 전달

public class JpaMain {
    public static void main(String[] args) {
        // 키를 파라미터로 전달
        String qlString = "select m from Member m where m.team.id = :teamId";
        List resultList = em.createQuery(qlString)
                .setParameter("teamId", teamId).getResultList();
    }
}

둘 다 아래와 같은 SQL이 실행된다.

select m.* from Member m
where m.team_id = ?

참고 :

김영한. 『자바 ORM 표준 JPA 프로그래밍』. 에이콘, 2015.

자바 ORM 표준 JPA 프로그래밍 - 기본편

profile
꾸준하게

0개의 댓글