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.