JPA/JPQL

엔티티를 직접 사용하기

chanhee01 2023. 8. 9. 14:30

JQPL에서는 기본 SQL과 다르게 엔티티를 직접 넘길 수 있다. 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

 

 

엔티티를 파라미터로 전달

String jpql = "select m from Member m where m = :member";
Member findMember = em.createQuery(jpql, Member.class)
            .setParameter("member", member)
            .getSingleResult();

 

식별자를 직접 전달

String jpql = "select m from Member m where m.id = :memberId";
Member findMember = em.createQuery(jpql, Member.class)
            .setParameter("memberId", member.getId())
            .getSingleResult();

 

 

 

 

외래 키 값을 사용

String jpql = "select m from Member m where m.team = :team";
List<Member> members = em.createQuery(jpql)
            .setParameter("team", teamA)
            .getResultList();

m.team은 db 입장에서 외래키이기 때문에 위의 에제처럼 식별자로 사용할 수 있다.