728x90
반응형
기본 키 값
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"
List resultList = em.createQuery(jpql)
.setParameter("member", member)
.getResultList();
식별자를 직접 전달해도 동일하다.
String jpql = "select m from Member m where m = :memberId"
List resultList = em.createQuery(jpql)
.setParameter("memberId", memberId)
.getResultList();
실행되는 SQL은 아래와 같다.
select m.* from Member m where m.id = ?
외래 키 값
외래 키 값을 사용하는 것도 기본 키를 사용하는 것과 크게 다르지 않다.
JPQL을 아래와 같이 작성을 하고 실행 시켜보면
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();
String qlString = "select m from Member m where m.team.id = :teamId";
List resultList = em.createQuery(qlString)
.setParameter("teamId", teamId)
.getResultList();
* m.team은 Member 엔티티에 있는 team(TEAM_ID)를 가리킨다.
SQL은 아래와 같이 나오게 된다.
select m.* from Member m where m.team_id = ?
728x90
반응형
'TIL > JPA' 카테고리의 다른 글
[TIL/JPA] 기본개념 : 벌크 연산 (2) | 2024.09.17 |
---|---|
[TIL/JPA] 기본개념 : Named 쿼리 (0) | 2024.09.17 |
[TIL/JPA] 기본개념 : 다형성 쿼리 (0) | 2024.09.15 |
[TIL/JPA] 기본개념 : 페치 조인(fetch join) (0) | 2024.09.11 |
[TIL/JPA] 기본개념 : 경로 표현식 (0) | 2024.09.10 |